1

ファイルから行を読み取って印刷しようとしています。

char *readLine(int n, FILE *file) {
    int i;
    int BUF=255;
    char temp[BUF];
    char puffer[BUF];
    for(i = 0; i < n-1; i++)
    if(fgets(temp, BUF, file) == NULL)
        return NULL; 

    if(fgets(puffer,BUF,file) == NULL)
        return NULL; 
    return puffer; 
}

次のようにすると、エラーは発生しません。

char * temp=readLine(2,somefile);

でもすぐに

printf("%s",temp);

valgrind は次のエラーを返します

Conditional jump or move depends on uninitialised value(s)
at 0x402EC04:strcrnul(in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
...
4

2 に答える 2

1

必要なメモリを malloc する必要があります。これで、関数スタック上の変数へのポインターが返されます。関数が戻った後はおそらく存在しないため、未定義の動作が発生します。

変化する

char puffer[BUF];

の中へ

char* puffer = malloc(BUF);

準備ができたら、このメモリを解放することを忘れないでください。

于 2013-08-14T22:30:24.310 に答える