C中的动态内存分配

时间:2016-03-22 02:03:33

标签: c memory malloc

使用malloc分配的内存与在C中声明非指针变量时分配的内存之间的主要区别是什么?

1 个答案:

答案 0 :(得分:1)

我想你要问的是返回指向对象的指针。

例如,假设我们有一个名为foo的结构:

struct foo
{
    int bar;
}

使用malloc()创建新的foo对象:

foo *newFoo1(void)
{
    foo *ptr = malloc(sizeof (struct foo));
    ptr -> bar = 42;
    return ptr;
}

newFoo1()上的内存块分配给ptr,然后进行所有初始化。最后,返回ptrnewFoo()返回后,*ptr的生命周期不会结束,因为它位于堆上,不会被覆盖。

否则,您可能只是返回指向本地变量的指针:

foo *newFoo2(void)
{
    foo aFoo;
    aFoo.bar = 42;
    return &aFoo;
}

在这种情况下,aFoo位于堆栈上。当newFoo2()返回时,aFoo的生命周期立即结束。相应的内存可能不会立即被覆盖,但在调用一个或多个函数后,所有包含的信息aFoo最终都会丢失。