假设我想动态分配内存,但要使用一个函数而不是main()函数。
所以我尝试这样做:
dynamAlloc(int *fPtr)
{
fPtr=malloc(cols * sizeof(*fPtr) );
if(fPtr==NULL)
{
printf("Can't allocate memory");
exit(1);
}
}
然后我意识到:即使在堆上分配的内存在程序的整个生命周期内都是可用的,但该内存只能由形式参数引用,fPtr
而不能由实际参数引用(我们称之为aPtr
)。但是一旦退出功能,该内存就会丢失。
那么,如何使用函数动态分配内存呢?
该内存只能由形式参数引用,
fPtr
而不能由实际参数引用(我们称之为aPtr
)。
aPtr
无法在调用之前表示堆内存对象,dynamAlloc()
因为该对象尚未分配,并且其地址分配给aPtr
trough fPtr
。此后,aPtr
请引用堆对象。
我们只需要传递的指针的地址aPtr
来dynamAlloc()
。因此,您需要适当的参数(实际参数)和参数(形式参数)以aPtr
在函数之间传递指针的地址,如下所示。
那么,如何使用函数动态分配内存呢?
您可以像执行此操作那样操作main()
,无论指针是在main()
函数内部声明还是在另一个函数中都没关系,您只需要将指针的地址传递aPtr
给要在其中使用堆内存对象的其他函数,例如fe:
#include <stdio.h>
#include <stdlib.h>
#define cols 5
void dynamAlloc(int** fPtr);
int main()
{
int* aPtr;
dynamAlloc(&aPtr);
free(aPtr);
return 0;
}
void dynamAlloc(int** fPtr)
{
*fPtr = malloc(sizeof(*fPtr) * cols);
if(*fPtr == NULL)
{
printf("Can't allocate memory");
exit(1);
}
}
不要忘free()
了堆内存!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句