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;
}
}
我剛剛添加了定義到我發佈的代碼。 – totten 2013-03-09 10:58:36
'if語句中'CHANNELS_PER_IOM'和'i'的值是多少? – 2013-03-09 11:01:20
我同意愛德。你最有可能寫出OldValues數組的邊界。這樣你可以調用未定義的行爲。至少你會覆蓋fp,fp_t或其他一些變量。最糟糕的是你會遇到分段錯誤。 – Arne 2013-03-09 11:01:27