重新分配指针所指向的内存后可以重用指针吗?

问题描述 投票:1回答:2

我是C的新手。我知道当我使用realloc()时,该指针被停用,因为新的内存块可能在另一个地址中(它设置为null吗?)。但是指针仅存储地址的值。那么我可以重用该指针在此之后存储另一个地址吗?而且,我可以这样做:

ptr= realloc(ptr, newsize);
c pointers dynamic-memory-allocation realloc
2个回答
1
投票

是的,您可以这样做。它本质上没有错。但是,这可能使得无法从失败的分配中恢复。如果您打算在分配失败的情况下退出程序,则没关系。

所以这很好:

ptr = realloc(ptr, newsize);
if(!ptr) exit(EXIT_FAILURE);

也是:

tmpptr = realloc(ptr, newsize);
if(!tmpptr) puts("Allocation failed. Continuing anyway.");
else ptr = tmpptr; 

0
投票

您可以重用它,但首先应该检查重新分配是否成功。

如果重新分配失败,则之后

ptr= realloc(ptr, newsize);

您丢失了对旧内存块的引用,即您很可能造成了内存泄漏。

您可能想要的是:

void *newptr;
if ( (newptr=realloc(ptr,newsize)) ) ptr = newptr;
else /*handle the error*/;
© www.soinside.com 2019 - 2024. All rights reserved.