在下面的代码中,我是否真的释放了指针占用的内存?如果没有,我怎么能释放记忆?在这里,我不想删除a
,而是指针。
int a = 1;
int* p;
p = &a;
p = NULL;
答案 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的内存在超出范围时自动删除