簡體   English   中英

從另一個函數內部返回本地malloc()指針

[英]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分配了tt本身也將位於堆棧上,對嗎?

那么,您可以從該函數返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM