c - 不确定为什么 if 语句会导致段错误



我的一个函数中有这个if语句,当我用gdb查询它时,它似乎返回了一个有效的结果,但它最终仍然给了我一个segfault

这是有问题的函数:

/* reads the file and adds each word to the trie
   returns the number of unique words in the file */
int read_file(FILE *in, T_node *root, int *max_len)
{
   char *word = NULL;
   int num_unique = 0;
   int len;
   max_len = 0;
   if(root == NULL)
   {
      perror("Bad root");
      exit(3);
   }
   while ((word = read_long_word(in)) != NULL)
   {
      len = strlen(word);
      /************ segfault here ***********/
      if (len > *max_len)
      {
         *max_len = len;
      }
      num_unique += add_word(root, word);
   }
   return num_unique;
}

这是我运行它的地方:

/* tests file with some repeated words */
void test_read_file2(void)
{
   FILE *in = fopen("repeated.txt", "r");
   T_node *root = create_T_node();
   int max_len = 0;
   /****** segfault caused by this call *****/
   checkit_int(read_file(in, root, &max_len), 8);
   checkit_int(max_len, 19);
   free_trie(root);
   fclose(in);
}

这是我从gdb得到的:

27            if (len > *max_len)
(gdb) p len
$4 = 5
(gdb) p *max_len
$5 = 0
(gdb) s
Program received signal SIGSEGV, Segmentation fault.
0x0000000000402035 in read_file (in=0x605010, root=0x605250, 
    max_len=0x7fffffffe0dc) at fw.c:27
27            if (len > *max_len)
(gdb) p *max_len
$6 = 0
(gdb) p len > *max_len
$7 = 1

正如您在上面看到的,当我打印if条件时,它返回true很好,但无论如何我在那行 (27( 上得到了分割错误。我错过了什么?

int read_file(FILE *in, T_node *root, int *max_len)

max_len是指针

max_len = 0;

此行使max_len为空指针。

*max_len = len;

在这里,您尝试取消引用空指针。

max_len的启动更改为

*max_len = 0;

相关内容

  • 没有找到相关文章

最新更新