C语言中的动态内存分配

C语言中的动态内存分配,c,memory,malloc,C,Memory,Malloc,使用malloc分配的内存与在C中声明非指针变量时分配的内存之间的主要区别是什么?我想您是在询问如何返回指向对象的指针 例如,假设我们有一个名为foo的结构: struct foo { int bar; } 使用malloc()创建新的foo对象: foo *newFoo1(void) { foo *ptr = malloc(sizeof (struct foo)); ptr -> bar = 42; return ptr; } newFoo1()将堆上

使用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
,然后进行所有初始化。最后,返回
ptr
newFoo()
返回后,
*ptr
的生存期不会结束,因为它驻留在堆上,不会被覆盖

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

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

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

。当声明自动对象的块退出时,自动对象的生存期结束。已分配对象的生存期在解除分配时结束(或程序结束)。@EOF还有加载程序为rodata等分配的空间。。。。这就是为什么Imma投票认为这“太广泛”的原因。