如果我在函数中有以下内容:
struct example *A=malloc(sizeof(struct example));
在函数结束/离开后,A 指向的节点/内存空间是否被销毁?还是留在堆中?
如果我在函数中有以下内容:
struct example *A=malloc(sizeof(struct example));
在函数结束/离开后,A 指向的节点/内存空间是否被销毁?还是留在堆中?
编号分配的内存malloc
将一直分配到free
'd。
做这样的事情:
char * function(void)
{
char c = 'a';
return &c;
}
另一方面,这很糟糕,因为当函数结束时,这个对象确实超出了范围。
malloc
在堆上分配内存。声明变量会在堆栈上分配空间。栈受作用域影响,堆则不受。
有关指针使用的更多信息,包括各种陷阱,例如内存泄漏(丢失对malloc
'd 内存的引用以使其永远存在的过程),请访问此链接。
你必须对free
你的一切malloc
。当您的函数返回时,变量A
超出范围,但您的内存保持分配状态。由于您丢失了指向内存的指针(除非存储在其他地方),因此您正在泄漏内存。
如果您仍然需要 指向的内存A
,您可以返回指向已分配结构的指针,然后释放它。如果函数返回后不需要分配的内存,请使用free(A)
.