使用malloc分配的内存与在C中声明非指针变量时分配的内存之间的主要区别是什么?
答案 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
,然后进行所有初始化。最后,返回ptr
。 newFoo()
返回后,*ptr
的生命周期不会结束,因为它位于堆上,不会被覆盖。
否则,您可能只是返回指向本地变量的指针:
foo *newFoo2(void)
{
foo aFoo;
aFoo.bar = 42;
return &aFoo;
}
在这种情况下,aFoo
位于堆栈上。当newFoo2()
返回时,aFoo
的生命周期立即结束。相应的内存可能不会立即被覆盖,但在调用一个或多个函数后,所有包含的信息aFoo
最终都会丢失。