内存是在函数结束时用 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(),但并非所有架构都支持。
我将给定类型的指针传递给函数。 在函数中我分配了所需的内存:
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(),但并非所有架构都支持。