You need to enable JavaScript to run this app. CS50 Speller代码fscanf循环触发Segmentation Fault问题求助
优惠活动
大模型
产品
解决方案
定价
更多

CS50 Speller代码fscanf循环触发Segmentation Fault问题求助

问题排查与修复方案
  • 检查node结构体定义
    如果你定义node时将word成员声明为字符指针char *word,而非长度为LENGTH+1的字符数组char word[LENGTH+1],那么strcpy(n->word, words)会操作野指针触发段错误。
    修复方案二选一:
    1. 修改node定义:将word成员改为char word[LENGTH + 1]
    2. 保留指针定义的话,在malloc node后新增分配word空间的代码:
      n->word = malloc(LENGTH + 1);
      if (n->word == NULL) {
          free(n);
          printf("Not enough memory for word. \n");
          return false;
      }
      
  • 检查hash函数返回值范围
    若hash函数返回值大于等于hashtable(即table数组)的总长度,访问table[hashValue]会触发数组越界,直接导致段错误。请确保hash返回值始终落在[0, 数组长度-1]的合法区间内。
  • 检查table数组初始化状态
    作为全局变量的table指针数组如果未初始化为全NULL,赋值n->next = table[hashValue]时会操作野指针,后续链表操作会触发异常。程序启动时需遍历table数组将所有元素设为NULL。
  • 可选优化:给fscanf加长度限制,避免字符串溢出
    将循环内的fscanf改为fscanf(dictionaryPointer, "%45s", words),显式限制读取的字符串最大长度,避免意外的缓冲区溢出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 05:45:03