0

重複の可能性:
メモリが原因で失敗した場合に realloc を処理する方法は?

ポインタの配列があるとしましょう

char **pointers_to_pChar = 0;
pointers_to_pChar = (char **)malloc(sizeof(char *) * SIZE);
for (i = 0; i < SIZE; ++i)
{
    pointers_to_pChar[i] = malloc(sizeof(char) * 100));
}

//some stuff...
//time to realloc 
pointers_to_pChar = realloc(pointers_to_pChar, sizeof(char *) * pointer_count + 1);
if (pointers_to_pChar == NULL)
{
    //i have to free pointers in the array but i don't have access to array anymore...
}

realloc が失敗した場合、どのように対処すればよいですか? メモリ リークの可能性を回避するために、配列内の各ポインターにアクセスして解放する必要があります。

4

3 に答える 3

1

結果を一時ポインタに書き込みます。失敗した場合realloc、メモリの元のブロックはそのまま残りますが、NULL を返すため、ポインタを失うことになります。

char **tmp = realloc(pointers_to_pChar, ...);
if (!tmp)
{
  //realloc failed
}
else
{
  pointers_to_pChar = tmp;
}
于 2012-09-13T16:03:28.367 に答える
1

リアルロックの男、あなたが見るでしょう

If realloc() fails the original block is left untouched; it is  not  freed
or moved.
于 2012-09-13T15:56:51.577 に答える
1

最初に別のポインターに再割り当てしてから、NULL を確認する必要があります。
このようにして、引き続きアレイにアクセスできます。

于 2012-09-13T15:53:21.390 に答える