2013-02-18 129 views
0

我有一段超过300行的程序,除了导致seg故障的fclose外,其他程序都运行了100%......现在,我甚至无法让我的程序运行。 gdb给了我这个错误,我真的不知道如何解释C程序中的Seg错误错误

____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, " ")); 
} 
+0

你运行Linux?如果是这种情况,请在valgrind下运行您的程序。 – fons 2013-02-18 10:17:54

+0

您是否在编译时启用了优化?用'-O0'编译你可能会得到更多的信息。 – slugonamission 2013-02-18 10:18:27

+0

看起来你传递了一个NULL指针作为strtol的第一个参数。 – Michael 2013-02-18 10:18:37

回答

0

您确定在致电fclose时触发SIGSEGV

它看起来就像你简单的传递一个NULL指针作为第一parameted strtol功能(在代码的其他部分)

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

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