void GetMemory(char* p,int num)
{
p =(char*)malloc(sizeof(char)*num);
};
int main(void)
{
char* str = NULL;
GetMemory(str,10);
strcpy(str,"Hello");//崩溃,GetMemory()函数不能传递动态内存,并且始终是null
return 0;
}
编译器总是为函数的每个参数制作临时变量,GetMemory函数体内的p是main函数中str变量在GetMemory()函数中的一个备份。虽然p申请了堆内存,但返回到main函数时,str还是null,而不是指向堆内存
3种解决动态内存不能传递的问题
1.C中,采用指向指针的指针,把str的地址传给GetMemory()函数
2.C++中,采用传递str指针的引用
3.使用函数返回值来传递动态内存