You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CS50 Runoff问题:使用strcmp触发Segmentation Fault排查求助

CS50 Runoff投票函数段错误修复

你的vote函数触发段错误主要有两个问题:

  • 循环边界用错了:代码里写的是i < voter_count,但遍历候选人应该用候选人总数candidate_count,如果选民数voter_count比候选人数量多,循环会超出candidates数组的范围,访问非法内存直接崩掉,尤其是输入非候选人姓名时,循环会一直跑越界。
  • 没处理空指针情况:直接调用strlen(name)时,如果name是NULL(比如输入无效的空值),strlen会直接触发段错误,因为它不能处理空指针参数。

修正后的代码:

bool vote(int voter, int rank, string name)
{
    // 先排查name为空指针或空字符串的情况
    if (name == NULL || strlen(name) == 0)
    {
        return false;
    }
    // 遍历候选人数组,用正确的边界candidate_count
    for (int i = 0 ; i < candidate_count ; i++)
    {
        if (strcmp(candidates[i].name , name) == 0)
        {
            preferences[voter][rank] = i;
            return true;
        }
    }
    return false;
}

修正说明

  1. 先判断name是否为NULL,再检查字符串长度,避免strlen和strcmp因空指针崩溃;
  2. 把循环条件改成i < candidate_count,确保只在候选人数组的合法索引范围内遍历,不会越界访问内存。

内容的提问来源于stack exchange,提问作者yhoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 22:55:13