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;
    }
}
4

1 に答える 1

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");

これにより、ファイルが実際に開かれているかどうかがチェックされます。

于 2013-03-09T10:56:28.257 に答える