1

我有一个超过 300 行的程序,除了导致 seg 错误的 fclose 之外,它 100% 工作......现在,我什至无法让我的程序运行。gdb 给了我这个错误,老实说我不知道​​如何解释

    ____strtol_l_internal (nptr=0x0, endptr=0x0, base=10,
       group=<value optimized out>, loc=0x349c78d580) at ../stdlib/strtol_l.c:298
       298       while (ISSPACE (*s))

谁能告诉我这是什么意思?

 readLinesFromFile(FILE* fPtr, int* num1, int* num2, char** strs, int lines)
 {
  int i;

  char data[50];

for (i = 0; i < lines; i++){
    fgets(data, 50, fPtr);
    strcpy (*(strs + i), strtok(data, " "));
    *(num1 + i) = atoi(strtok(NULL, " "));
    *(num2 + i) = atoi(strtok(NULL, " "));
}
4

1 回答 1

0

您确定SIGSEGV调用时会触发fclose吗?

看起来您很简单地将NULL指针作为strtol函数的第一个参数传递(在代码的其他部分中)

另一种选择可能是堆栈完全搞砸了。

尝试运行它,gdb当它崩溃时使用命令where查看堆栈

于 2013-02-18T10:18:33.117 回答