内存思考,写出程序的可能结果,如果程序出错标记哪里出错,并指出出错原因。
1、
void GetMemory(char *p)
{
p = new char[100];
}
void main()
{
char *str = NULL;
GetMemory(str);
strcpy(str,"Hello world");
printf("%s\n",str);
}
典型的值传递问题,str并不会因为函数GetMemory获得空间的指向地址,它的值仍然是NULL,向里面拷贝字符串会导致报错。
2、
char *GetMemory()
{
char p[] = "Hello World";
return p;
}
void main()
{
char *str = GetMemory();
printf("%s\n",str);
}
典型的函数局部变量被释放问题,str指向的空间已经被释放,所以里面的值是乱码。
3、
char *GetMemory()
{
char *p = "Hello world";
return p;
}
void main()
{
char *str = GetMemory();
printf("%s\n",str);
}
这个是正确的