代码:
#include<iostream>
using namespace std;
void getmemory(char *p)
{
p=(char *) malloc(100);
strcpy(p,"hello world");
}
int main()
{
char *str=NULL;
getmemory(str);
printf("%s\n",str);
free(str);
return 0;
}
运行结果:
答案:程序崩溃,getmemory中的malloc 不能返回动态内存, free()对str操作很危险
博主:getmemory中p是形参,是一个指针变量,getmemory(str)调用后,传入的是指针变量保存的对象地址,p=(char *) malloc(100)实际上是把申请的动态内存空间的首地址付给p指向的地址(即str指向的地址null),这个是错误的。应该修改成指向指针的指针void getmemory(char **p),这样malloc返回的地址付给*p(即str变量本身)。
正确代码:
#include<iostream>
using namespace std;
void getmemory(char **p)
{
*p=(char *) malloc(100);
strcpy(*p,"hello world");
}
int main()
{
char *str=NULL;
getmemory(&str);
printf("%s\n",st