2013-03-09 12 views
0

我有這個問題後,我添加一些套接字連接代碼以下代碼。當fp沒問題,當讀取數據(第4行)時指向某個內存地址,但當調試程序(gdb)到達if塊時,fp指針只是指向0x0,這可能是什麼原因。文件指針過期沒有韻或原因

#define CHANNELS_PER_IOM 25 

... 

int OldValues[CHANNELS_PER_IOM]; 
FILE * fp; 
FILE * fp_t; 
int buff; 
int i; 

fp = fopen("/windcom/tmp/dout_values", "r"); 
fp_t = fopen("/windcom/tmp/dout_values.tmp", "w"); 
i = 0; 

while(fp && fscanf(fp, "%d\n", &buff) == 1) // fp is pointing some address here. 
{ 
    i++; 
    OldValues[i-1] = buff; 
    //printf("%d %d \n", OldValues[i-1], buff); 
} 
if(!fp) //fp is pointing 0x0 here. 
{ 
    for(i=0; i<CHANNELS_PER_IOM; i++) 
    { 
     OldValues[i] = 0; 
    } 
} 

回答

1

OldValues在哪裏定義?你可能沒有足夠大,不幸的是fp被無意中覆蓋。

編輯

試試這個代碼:

while(i < CHANNELS_PER_IOM && 
     fp && 
     fscanf(fp, "%d\n", &OldValues[i++]) == 1) // fp is pointing some address here. 
{ 
    // Empty 
} 

EDIT 2

並經過

fp = fopen("/windcom/tmp/dout_values", "r"); 

if (!fp) printf("Unable to open file\n"); 

,這將檢查該文件實際上是打開的。

+0

我剛剛添加了定義到我發佈的代碼。 – totten 2013-03-09 10:58:36

+0

'if語句中'CHANNELS_PER_IOM'和'i'的值是多少? – 2013-03-09 11:01:20

+0

我同意愛德。你最有可能寫出OldValues數組的邊界。這樣你可以調用未定義的行爲。至少你會覆蓋fp,fp_t或其他一些變量。最糟糕的是你會遇到分段錯誤。 – Arne 2013-03-09 11:01:27

相關問題