1

malloc でメモリを割り当てます - 約 128 バイト。

後で、約 200 バイトで realloc を呼び出しますが、null が返されます!

解放すると有効なポインターが返され、次に別の malloc が返されますが、realloc を使用したいと考えています。

この動作を説明できるものは何ですか (明らかにメモリ不足ではありません)。これは有効な動作ですか?

コードビット:

//class constructor
size = 0;

sizeAllocated = DEFAULT_BUFFER_SIZE; //64

data = (char*)malloc(sizeAllocated * sizeof(char)); //data is valid ptr now, I've checked it

data[0] = '\0';

//later on:
//append function
bool append(char** data, const char* str, size_t strLen) {
  if((size + strLen) >= sizeAllocated) {
     sizeAllocated += strLen + 1 + BUFFER_ALLOCATION_STEP;
     char* temp = realloc(*data, sizeAllocated * sizeof(char));
     if(temp)
        *data = temp;

     return( temp != NULL );

}

編集:修正。クラスの << 演算子をオーバーロードしていて、void ではなく *this を返すようにしました。どういうわけか、これはすべてを台無しにしていた!誰かがなぜこれが起こるのか説明できれば、それは素晴らしいことです!

4

1 に答える 1

1

以下のコメントが質問に追加されたので

data = (char*)realloc(data, (size_t)(sizeAllocated * sizeof(char)));

sizeAllocated を同じ値の定数に置き換えると、正しく再割り当てされます

これで、何が起こったのかを理解できます。sizeAllocated を、同じ値を持たない定数に置き換えました。デバッグ目的で、sizeAllocated の値を出力するステートメントを追加すると、驚かれることでしょう。

于 2011-01-25T01:19:33.323 に答える