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