C 语言中的动态内存分配



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

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

例如,假设我们有一个名为 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包含的所有信息最终都会丢失。

相关内容

  • 没有找到相关文章

最新更新