读书人

有关内存的有关问题

发布时间: 2012-12-23 11:28:15 作者: rapoo

有关内存的问题

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 的指针变量
[其他解释]
引用:
确实如楼上所说,不能返回局部变量的地址
你试着编译下下面的代码


C/C++ code?



12345678910111213

char*GetMemory(void) { char *q; char p[]="hello world"; q=p; return q; } void Test(void) { char *str=N……
依然是乱码啊,对吗?
[其他解释]
引用:
引用:确实如楼上所说,不能返回局部变量的地址
你试着编译下下面的代码


C/C++ code?



12345678910111213

char*GetMemory(void) { char *q; char p[]="hello world"; q=p; return q; ……

把你的完整代码贴出来看看
[其他解释]
引用:
引用:引用:确实如楼上所说,不能返回局部变量的地址
你试着编译下下面的代码


C/C++ code?



12345678910111213

char*GetMemory(void) { char *q; char p[]="hello world"……
我贴出来的就是书上的完整代码了。
[其他解释]
学习了
[其他解释]
引用:
C/C++ code?1234567891011char*GetMemory(void){char p[]="hello world";//把hello world拷贝到p数组里,它是栈分配的内存,函数结束会被释放return p;}void Test(void){char *str=NULL;str=GetMemory();//str指向的是已被释放的内存区域,结果将不……


+++
[其他解释]
引用:
C/C++ code?123456789101112131415char*GetMemory(void){ char *q=new char[20]; char p[]="hello world"; q=p; return q;}void Test(void){ char *str=NULL; str=GetMemory(); p……
嗯,二楼的回答我看懂了,就是想再看看大家的解答,你的这个代码我试了一下,运行的时候崩溃了。
[其他解释]
我是想问大家,这道题应该怎么改才对呢。
[其他解释]
引用:
引用:引用:引用:确实如楼上所说,不能返回局部变量的地址
你试着编译下下面的代码


C/C++ code?



12345678910111213

char*GetMemory(void) { char *q; ……

返回静态区的指针吧
#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被管理员删除
[其他解释]
引用:
引用:引用:引用:引用:确实如楼上所说,不能返回局部变量的地址
你试着编译下下面的代码


C/C++ code?



12345678910111213

char*GetMemory(……
嗯,这样是可以的。

读书人网 >C语言

热点推荐