如果我在函数中有以下内容:
struct example *A=malloc(sizeof(struct example));
是否创建了节点/内存空间,在该函数结束/离开后,A指向哪个点被销毁?还是留在堆里?
答案 0 :(得分:1)
没有。由malloc
分配的内存将保留到free
'd。
做这样的事情:
char * function(void)
{
char c = 'a';
return &c;
}
另一方面,很糟糕,因为当函数结束时,此对象超出范围。
malloc
在堆上分配内存。声明变量会在堆栈上分配空间。堆栈受范围的影响,堆不是。
有关使用指针的其他信息,包括内存泄漏等各种问题(丢失对malloc
'内存的引用以使其永久存在的过程),请访问this link。< / p>
答案 1 :(得分:1)
您必须free
malloc
的所有内容。当函数返回时,变量A
超出范围,但内存保持分配状态。当你丢失了指向内存的指针(除非存储在别处),你就是leaking memory。
如果仍然需要A
指向的内存,则可以返回指向已分配结构的指针,稍后将其释放。如果在函数返回后不需要分配的内存,请使用free(A)
释放内存。