文字配列へのポインターを持つ単純な C プログラムがあります。それを開始するには、 を使用malloc
し、サイズを変更してから、後でプログラムで x 回設定します。
でサイズを一度変更するとrealloc
、gdbはエラーを表示しませんが、サイズ変更関数を再度呼び出すと、gdbは次のエラーを表示します。
warning: Invalid Address specified to RtlReAllocateHeap( 003E0000, 00404076 )
サイズを複数回変更すると、このエラーが発生する理由はありますか?
編集
いろいろいじってみたところ、リサイズ後のポインタデータの設定をコメントアウトしてもエラーにはならないようです。
void setName(struct class_x *class, char *name)
{
class->name = (char *) reallocateMemory(class->name, sizeof(char) * strlen(name) + 1);
class->name = name;
}
void *reallocateMemory(void *member, size_t size)
{
void *tmp = realloc(member, size);
if(tmp == NULL)
{
//handle
}
return tmp;
}