[英]Returning local malloc() pointer from inside another function
我正在瀏覽普林斯頓大學的一些演講幻燈片 ,並有一個問題。 教授有以下代碼段(在幻燈片8上):
struct Table *Table_create(void) {
struct Table *t;
t = (struct Table*)malloc(sizeof(struct Table));
t->first = NULL;
return t;
}
struct Table *t;
…
t = Table_create();
…
在Table_crate()
函數中,即使使用malloc
分配了t
, t
本身也將位於堆棧上,對嗎?
那么,您可以從該函數返回t
嗎? 我認為Table_create()
t
將在函數返回時消失。
變量t
具有自動存儲持續時間。 但這並不能阻止您從函數中返回其值 。 值本身(即malloc()
返回的指針)具有程序的生存期(或直到您對其調用free()
為止)。 因此,從函數返回malloc()
的值不是問題。
如果有幫助,請考慮以下事項:
int func(int num)
{
int val;
val = num * 2; // take care of signed integer overflow!
return val;
}
在這里返回val
是否與val
的生命周期有關(這是一個局部變量並具有自動存儲持續時間)? 不。這類似於您擁有的malloc()
代碼。
變量t
位於堆棧上,但是它指向的內容(通過調用malloc
)位於堆棧上。
當您返回t
您將返回它的值,即分配的內存上的地址。 然后將其分配給調用方中的局部變量。 如果未在調用方中分配它,則可能會發生內存泄漏。 在某些時候,您將需要撥打free
電話以釋放內存並避免內存泄漏。
是的,您可以返回存儲在 t
的值,因為該值已被復制到調用方,但是您不應返回指向 t
指針或引用,因為t
將會消失並且此類指針或引用是無用的。
t
不會在堆棧上。 您可以從函數返回t
。 malloc
會記住分配的內存,直到您調用free
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.