C 文件指针已过期,没有任何原因

C 文件指针已过期,没有任何原因,c,file,C,File,在以下代码之后添加一些套接字连接代码后,我出现了此问题。当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

在以下代码之后添加一些套接字连接代码后,我出现了此问题。当
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;
    }
}
#根据IOM 25定义通道
...
int oldValue[每个IOM的通道数];
文件*fp;
文件*fp_t;
int buff;
int i;
fp=fopen(“/windcom/tmp/dout_值”,“r”);
fp_t=fopen(“/windcom/tmp/dout_values.tmp”,“w”);
i=0;
而(fp&&fscanf(fp,“%d\n”,&buff)==1)//fp指向此处的某个地址。
{
i++;
OldValues[i-1]=buff;
//printf(“%d%d\n”,旧值[i-1],浅黄色);
}
如果(!fp)//fp在这里指向0x0。
{

对于(i=0;i哪里定义了
OldValues
?您可能不够大,不幸的是,
fp
被意外覆盖

编辑

请尝试以下代码:

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


这将检查文件是否实际打开。

if
语句中
CHANNELS\u PER\u IOM
i
的值是多少?我同意Ed的说法。您很可能写入了OldValues数组的边界之外。这样您就调用了未定义的行为。至少您覆盖了fp、fp\u t或其他一些变量。at t他说,你有一个分段错误。@EdHeal,它的值只有25,不算大,但…它真的足以覆盖到fp吗?我尝试编辑2,文件被打开。没有错误消息。@EnesUnal-如果你做了两次编辑,我看不出任何错误。也许你没有提供关键的代码。
fp = fopen("/windcom/tmp/dout_values", "r");
if (!fp) printf("Unable to open file\n");