首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

有关内存的有关问题

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


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(……
嗯,这样是可以的。

热点排行