【发布时间】:2020-05-11 22:55:01
【问题描述】:
假设我想动态分配内存,但使用函数而不是 main() 函数。
所以我尝试这样做:
dynamAlloc(int *fPtr)
{
fPtr=malloc(cols * sizeof(*fPtr) );
if(fPtr==NULL)
{
printf("Can't allocate memory");
exit(1);
}
}
然后我意识到:即使在堆上分配的内存在程序的整个生命周期内都可以使用,但该内存只能被形式参数 fPtr 引用,而不是实际参数(我们称之为 aPtr)。但是一旦退出函数,该内存就会丢失。
那么我该如何使用函数动态分配内存呢?
【问题讨论】:
-
formal arument fPtr and not the actual argumen- 什么是“正式论证”?什么是“实际论证”?它们有何不同?您是在问如何从函数的外部范围为变量赋值? -
类似How to change a variable in a calling function from a called function??
assign a memory block- 指针不是内存块,它只是内存地址。 -
所以我所要做的就是将
int *fPtr替换为int **fPtr以接收&aPtr作为参数? -
dynamAlloc(int **fPtr)然后*fPtr=malloc(cols * sizeof(**fPtr) );否则,您将分配的块分配给函数本地指针的 copy ,因此在main()中永远不会看到分配(本质上是内存泄漏)。在main()中与dynamAlloc (&pointer)通话。 -
@KamiCuk @DavidThe 多个取消引用
*操作员使它看起来比实际更难,但我意识到这个概念仍然是一样的。非常感谢你给我指路!
标签: c malloc heap-memory