内存是在函数结束时用 malloc 分配还是用 calloc 释放?

Is memory allocated with malloc or calloc deallocated at the end of a function?

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

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

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

但是之前填充的指针现在没有内存了

指针不应该保留其已填充的内存吗?

或者函数的结束是否释放内存?

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

没有。 malloc 分配的内存不会在函数结束时释放。

否则,那将是一场灾难,因为您将无法编写一个通过为其分配内存、填充数据并将其返回给调用者来创建数据结构的函数。

不,但您没有return指向调用者的指针。函数内的参数与调用站点的值不同,因此通过从 malloc() 分配 return 值来更改它不会更改调用者的值。

这个:

Foo *foo;

AllocateAFoo(foo);

没有机会在 函数 return 之后更改 foo 的值,即使参数已分配给函数内部。这就是为什么malloc()returns的新值。

您也需要这样做:

mytype * Allocate(size_t num)
{
  return malloc(num * sizeof (mytype));
}

这意味着将未初始化的指针从调用者发送到函数是没有意义的,所以不要这样做。

此外,you shouldn't cast the return value of malloc() in C

此外,您需要注意 malloc() 只是一个与其他函数一样的函数。 you 将如何编写一个在执行离开其他函数时做出反应的函数?答案当然是"you can't",所以malloc()也不行。

您可以使用 alloca(),但并非所有架构都支持。