我将给定类型的指针传递给函数。 在函数中我分配了所需的内存:
Pointer = (mytype * ) malloc (N* sizeof (mytype));
一切顺利。函数结束后,另一个调用指针。
但是之前填充的指针现在没有记忆了。
指针不应该保留其内存吗?
或者函数的结尾是否取消分配内存?
抱歉,我无法粘贴代码,因为我在非连接的PC上工作。
答案 0 :(得分:3)
没有。由malloc分配的内存不会在函数末尾取消分配。
否则,这将是一场灾难,因为您无法通过为其分配内存,填充数据并将其返回给调用者来编写创建数据结构的函数。
答案 1 :(得分:2)
不,但是你没有将指针返回给调用者。函数内部的参数与调用站点的值不同,因此通过从malloc()
指定返回值来更改它不会更改调用者的值。
此:
Foo *foo;
AllocateAFoo(foo);
在函数返回后,无法更改foo
的值,即使参数已分配给函数内部也是如此。这就是malloc()
返回新值的原因。
您还需要这样做:
mytype * Allocate(size_t num)
{
return malloc(num * sizeof (mytype));
}
这意味着将未初始化的指针从调用者发送到函数是没有意义的,所以不要这样做。
另外,you shouldn't cast the return value of malloc()
in C。
此外,您需要注意malloc()
只是一个与其他功能一样的功能。如何你编写一个在执行离开其他函数时会做出反应的函数?答案当然是“你不能”,因此malloc()
也不能。
答案 2 :(得分:0)
您可以使用alloca(),但并非所有架构都支持此功能。