C语言 从另一个函数内部返回本地 malloc() 指针



我正在浏览普林斯顿大学的一些讲座幻灯片,并有一个问题。教授有以下代码片段(在幻灯片 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()函数中,即使t是使用 malloc 分配的,t本身也会位于堆栈上,对吗?

那么,您可以从此函数返回t吗?我认为t Table_create()函数返回后就会消失。

变量t具有自动存储持续时间。但这并不妨碍您从函数返回其。值本身(即malloc()返回的指针)具有程序的生存期(或直到您调用free())。所以,这不是问题从函数返回malloc() 'ed 值。

如果有帮助,请考虑以下情况:

int func(int num)
{
    int val;
    val = num * 2; //  take care of signed integer overflow!
    return val;
}

此处返回valval的生命周期(这是一个局部变量,具有自动存储持续时间)有关吗?不。这类似于您拥有malloc()代码。

变量t存在于堆栈上,但它指向的东西(通过调用malloc)存在于堆上。

当您返回t时,您将返回它的值,即分配的内存上的地址。然后将其分配给调用方中的局部变量。如果您没有在调用方中分配它,则会出现内存泄漏。在某些时候,您将需要调用free以释放内存并避免内存泄漏。

是的,您可以返回存储在 t 中的值,因为该值已复制到调用方,但不应返回指向t的指针或引用,因为t会消失并且此类指针或引用无用。

>t不会在堆栈上。您可以从函数返回tmalloc会记住分配的内存,直到您调用free

相关内容

  • 没有找到相关文章

最新更新