int main(void)
{
int *a = malloc(10);
return 0;
}
如何在不使用free()
的情况下释放内存?
答案 0 :(得分:14)
从联系手册:
realloc()函数将ptr指向的内存块的大小更改为size字节。内容将在该地区开始的范围内保持不变 最新的尺寸。如果新大小大于旧大小,则不会初始化添加的内存。如果ptr为NULL,则调用为 对于所有大小值,等效于malloc(大小);如果size等于零,并且ptr不为NULL,则该调用等效于free(ptr)。除非ptr为NULL,否则它 必须由之前调用malloc(),calloc()或realloc()返回。如果指向的区域被移动,则完成免费(ptr)。
因此,您需要调用大小为0的realloc()。
realloc(a, 0);
答案 1 :(得分:-1)
alloca()
在调用者的堆栈帧上分配内存,在返回时释放。此函数的行为不可移植,并且手册页本身表示不使用它。