2013-02-18 133 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查看堆棧