0

valgrind でエラーが発生し、何が問題なのかわかりません。エラーは次のとおりです: valgrind 出力:

==1112== Conditional jump or move depends on uninitialised value(s)
==1112==    at 0x402BF0D: realloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)

そして、226行目で問題が発生すると述べています。

if(reallocate ==TRUE)
{
    char** temp_values = NULL;


    temp_values = (char**) realloc(theBoard->_values, theBoard->_size_r*sizeof(char*) );

    if(temp_values!=NULL)
    {
        theBoard->_values = temp_values;
    } else
    {
        reportError(MEM_OUT);
        return FALSE;
    }

    int i = 0;
    for (i=0; i<theBoard->_size_r; i++)
    {
        char* temp_values_c = NULL;
HERE( line 226)->   temp_values_c = realloc(theBoard->_values[i], theBoard->_size_c*sizeof(char) );

        if(temp_values_c != NULL)
        {
            theBoard->_values[i] = temp_values_c;
        } else
        {
            reportError(MEM_OUT);
            return FALSE;
        }
    }

    // initialize extra memory
    if(row_out_bound)
    {
        init(theBoard,prev_size_r,0);
    }

    if(col_out_bound)
    {
        init(theBoard,0, prev_size_c);
    }

}

なぜこれが起こっているのですか、どうすれば修正できますか?

4

1 に答える 1

7

問題は、 ( )theBoard->_values[i]から直接来るため、初期化されていないことです。realloctemp_values = ...

編集

詳しく教えてください。

私はあなたが決して尋ねないだろうと思っていました。この関数reallocは、指定されたサイズのメモリのチャンクを返しますが、その内容に関する保証はありません。したがって、すべての実用的な目的のために、realloc返されるものにはゴミが含まれていると想定する必要があります。あなたのコードでは、その(潜在的な)ゴミを取り、オンライン226でreallocを伝えます:

これは、完全に有効なポインタです。それはNULL、または私が以前に から入手したものmallocです。このサイズに再割り当てできますか?そして、それは真実ではありません!に含まれる実際の値はtheBoard->_values[i]何でもかまいません。

あなたが望むのは、226行目の代わりにtheBoard->_values[i] = NULL、または多分使用するループです。mallocrealloc

于 2012-12-04T18:25:09.017 に答える