为什么此功能有时会导致段错误?

时间:2019-05-23 13:38:06

标签: c segmentation-fault

我试图计算存储在结构数组中的每个单词的出现次数。首先,我将整个文件读到缓冲区,然后从缓冲区中提取单词,然后通过strdup()将其放入结构数组中。尽管代码通常工作得很好,但有时它只会导致负责计算出现次数的段错误。

我试图为静态和动态结构数组分配内存。

/*Function counting occurences*/
void countOccurences(words * word, int numberOfWords) {

  int d, g; //iterators
  int counter;

  for (d = 0; d < numberOfWords; d++) {
    counter = 1;

    if (word[d].toCheck == true) {
      for (g = d + 1; g < numberOfWords; g++) {
        if (strcmp(word[d].word, word[g].word) == 0) //if found
        {
          counter++;
          word[g].toCheck = false;
          word[g].count = -1;
        }
      }
    }
    word[d].count = counter;
  }
}

希望可以正确地检查整个阵列而不会出现段错误

编辑:

在main中初始化数组如下:

words * word = malloc(sizeof(words)* numberOfWords);

1 个答案:

答案 0 :(得分:0)

如果numberOfWords是正确的,并且您要传递的指针指向数组的开头,则此特定函数不应导致段错误。第一步是验证您使用正确的参数调用该函数。