【问题标题】:Dynamic memory allocation in C [closed]C中的动态内存分配
【发布时间】:2016-03-22 02:03:32
【问题描述】:

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

【问题讨论】:

  • 终身。当声明它的块退出时,自动对象的生命周期结束。分配对象的生命周期在它被释放(或程序结束)时结束。
  • @EOF 还有加载器为rodata等分配的空间。
  • ...这就是为什么 Imma 近距离投票认为它“过于宽泛”。

标签: c memory malloc


【解决方案1】:

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

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

struct foo
{
    int bar;
}

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

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

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

否则,您可以简单地返回指向局部变量的指针:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2015-06-27
    • 2021-02-28
    • 2012-01-20
    相关资源
    最近更新 更多