我是C的新手。我知道当我使用realloc()
时,该指针被停用,因为新的内存块可能在另一个地址中(它设置为null吗?)。但是指针仅存储地址的值。那么我可以重用该指针在此之后存储另一个地址吗?而且,我可以这样做:
ptr= realloc(ptr, newsize);
是的,您可以这样做。它本质上没有错。但是,这可能使得无法从失败的分配中恢复。如果您打算在分配失败的情况下退出程序,则没关系。
所以这很好:
ptr = realloc(ptr, newsize);
if(!ptr) exit(EXIT_FAILURE);
也是:
tmpptr = realloc(ptr, newsize);
if(!tmpptr) puts("Allocation failed. Continuing anyway.");
else ptr = tmpptr;
您可以重用它,但首先应该检查重新分配是否成功。
如果重新分配失败,则之后
ptr= realloc(ptr, newsize);
您丢失了对旧内存块的引用,即您很可能造成了内存泄漏。
您可能想要的是:
void *newptr;
if ( (newptr=realloc(ptr,newsize)) ) ptr = newptr;
else /*handle the error*/;