使指针NULL释放内存?

时间:2014-04-03 00:56:01

标签: c++ pointers

在下面的代码中,我是否真的释放了指针占用的内存?如果没有,我怎么能释放记忆?在这里,我不想删除a,而是指针。

int a = 1;
int* p;
p = &a;
p = NULL;

4 个答案:

答案 0 :(得分:2)

不,它只是将指针值赋给NULL

对于您的特定示例,看起来a是一个堆栈变量,因此无论如何都不能free。您只能通过使用delete在堆上分配的内存上调用new来释放内存。

关于问题,"如何释放内存",通常不需要释放以这种方式分配的内存。如果您在函数内部,则在函数退出时会自动回收内存。如果变量是全局分配的,那么在程序结束之前永远不会释放它。

编辑(对OP&#39s编辑的响应):当指定的上下文返回时,指针也将超出范围。除非使用new创建指针,否则无法显式释放指针。

答案 1 :(得分:2)

a在堆栈中声明,因此您不必释放它。您必须使用new释放使用delete分配的对象。

有关堆和堆栈的更多信息,请参阅here

答案 2 :(得分:0)

当且仅当 free时才需要alloc

由于已将指定指向未分配的指针p,因此您无需免费。

答案 3 :(得分:0)

变量a存储在堆栈中而不是存储在动态内存中,我们只释放由我们分配的内存,即通过sing malloc,calloc,alloc,而不是系统。 a的内存在超出范围时自动删除