1

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

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

在函数结束/离开后,A 指向的节点/内存空间是否被销毁?还是留在堆中?

4

2 回答 2

1

编号分配的内存malloc将一直分配到free'd。

做这样的事情:

char * function(void)
{
    char c = 'a';
    return &c;
}

另一方面,这很糟糕,因为当函数结束时,这个对象确实超出了范围。

malloc在堆上分配内存。声明变量会在堆栈上分配空间。栈受作用域影响,堆则不受。

有关指针使用的更多信息,包括各种陷阱,例如内存泄漏(丢失对malloc'd 内存的引用以使其永远存在的过程),请访问此链接

于 2013-03-21T01:31:49.297 回答
1

你必须对free你的一切malloc。当您的函数返回时,变量A超出范围,但您的内存保持分配状态。由于您丢失了指向内存的指针(除非存储在其他地方),因此您正在泄漏内存

如果您仍然需要 指向的内存A,您可以返回指向已分配结构的指针,然后释放它。如果函数返回后不需要分配的内存,请使用free(A).

于 2013-03-21T01:31:57.827 回答