0

可能重复:
由于内存导致重新分配失败时如何处理?

假设我有一个指针数组

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

您应该首先重新分配到不同的指针,然后检查 NULL。
这样你仍然可以访问数组。

于 2012-09-13T15:53:21.390 回答
1

man the realloc,你会看到

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

将结果写入临时指针;如果realloc失败,则原始内存块保持不变,但它返回 NULL,因此您最终会丢失指向它的指针:

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