是在函数末尾释放了malloc或calloc分配的内存吗?

时间:2015-10-01 07:47:05

标签: c pointers dynamic-memory-allocation

我将给定类型的指针传递给函数。 在函数中我分配了所需的内存:

Pointer = (mytype * ) malloc (N* sizeof (mytype));

一切顺利。函数结束后,另一个调用指针。

但是之前填充的指针现在没有记忆了。

指针不应该保留其内存吗?

或者函数的结尾是否取消分配内存?

抱歉,我无法粘贴代码,因为我在非连接的PC上工作。

3 个答案:

答案 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(),但并非所有架构都支持此功能。