有关内存的有关问题
有关内存的问题char*GetMemory(void){char p[]hello worldreturn p}void Test(void){char *strNULL
有关内存的问题
char*GetMemory(void)
{
char p[]="hello world";
return p;
}
void Test(void)
{
char *str=NULL;
str=GetMemory();
printf(str);
}
上面的这个程序是在《高质量程序设计指南》里看到的,题目问的是运行Test函数会有什么样的结果,书上的回答我不是完全看懂了,哪位可以详细讲解一下这道题目,谢谢。
[最优解释]char*GetMemory(void)
{
char p[]="hello world";//把hello world拷贝到p数组里,它是栈分配的内存,函数结束会被释放
return p;
}
void Test(void)
{
char *str=NULL;
str=GetMemory();//str指向的是已被释放的内存区域,结果将不可知
printf(str);//乱码一堆
}
[其他解释]确实如楼上所说,不能返回局部变量的地址
你试着编译下下面的代码
char*GetMemory(void)
{
char *q;
char p[]="hello world";
q=p;
return q;
}
void Test(void)
{
char *str=NULL;
str=GetMemory();
printf(str);
}
[其他解释]书上的回答我不是完全看懂了,
哪位可以详细讲解一下这道题目,
[其他解释]
char*GetMemory(void)
{
char *q=new char[20];
char p[]="hello world";
q=p;
return q;
}
void Test(void)
{
char *str=NULL;
str=GetMemory();
printf(str);
delete[]str;
}
不知道有没有写对
其实2楼已经完美的解答了你的问题
[其他解释]不能返回指向 stack 的指针变量
[其他解释]依然是乱码啊,对吗?
[其他解释]把你的完整代码贴出来看看
[其他解释]我贴出来的就是书上的完整代码了。
[其他解释]学习了
[其他解释]+++
[其他解释]嗯,二楼的回答我看懂了,就是想再看看大家的解答,你的这个代码我试了一下,运行的时候崩溃了。
[其他解释]我是想问大家,这道题应该怎么改才对呢。
[其他解释]返回静态区的指针吧
#include <stdio.h>
char *GetMemory(void)
{
char *p="hello world";
return p;
}
void main(void)
{
char *str;
str=GetMemory();
puts(str);
}
[其他解释]该回复于2012-11-26 08:59:58被管理员删除
[其他解释]嗯,这样是可以的。