函数中的struct指针范围

时间:2013-03-21 01:28:14

标签: c pointers struct heap function-pointers

如果我在函数中有以下内容:

struct example *A=malloc(sizeof(struct example));

是否创建了节点/内存空间,在该函数结束/离开后,A指向哪个点被销毁?还是留在堆里?

2 个答案:

答案 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)释放内存。