我在后面的代码中添加了一些套接字连接代码后出现此问题。当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;
}
}
答案 0 :(得分:1)
OldValues
在哪里定义?你可能不够大,不幸的是fp
被无意中覆盖了。
修改强>
试试这段代码:
while(i < CHANNELS_PER_IOM &&
fp &&
fscanf(fp, "%d\n", &OldValues[i++]) == 1) // fp is pointing some address here.
{
// Empty
}
编辑2
把
之后
fp = fopen("/windcom/tmp/dout_values", "r");
把
if (!fp) printf("Unable to open file\n");
这将检查文件是否实际打开。