标题:怎么回事啊,难道程序错了?
只看楼主
fanfan320
Rank: 3Rank: 3
来 自:运城
等 级:论坛游侠
帖 子:82
专家分:104
注 册:2010-5-12
结帖率:63.64%
 问题点数:0 回复次数:8 
怎么回事啊,难道程序错了?
#include"stdio.h"
#include"iostream.h"
char *getmemory(void)
{
    char p[]="hello word";
return p;
}
void main()
{
char *str=NULL;
str=getmemory();
printf(str);
getchar();
}


结果是:hell@ .为什么不是:hello word
搜索更多相关主题的帖子: include return hello 
2010-05-24 15:09
ciweitou163
Rank: 7Rank: 7Rank: 7
来 自:河北 石家庄
等 级:黑侠
威 望:1
帖 子:144
专家分:528
注 册:2008-10-4
得分:0 
你用cout输出试试!


  • 满眼生机转化钧;天工人巧日争新。
2010-05-25 19:35
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
得分:0 
回复 楼主 fanfan320
你认为没有错误吗?p的生命期是。。。?

★★★★★为人民服务★★★★★
2010-05-25 20:57
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
得分:0 
回复 楼主 fanfan320
你要注意你的被调函数一旦运行结束他的所有的栈区空间都被收回了。所有你的输出结果出现了问题。
看看我的这个,是在你的基础上改的,能够正确输出了。你试试看。好好领悟一下其中的不同之处。
这个很重要,你的这个问题很好,很典型!
程序代码:
#include"iostream.h"
#include<stdio.h>
#include<string.h>

char* getmemory(void)
{
    char*p;
    p=new char[50];
    strcpy(p,"hello,world!");
   
    return p;
}
void main()
{
char *str=NULL;
str=getmemory();
printf(str);
getchar();
delete[] str;    //这句不能少,否则容易发生内存泄露!
}

 

[ 本帖最后由 南国利剑 于 2010-5-26 02:35 编辑 ]

南国利剑
2010-05-26 02:29
fanfan320
Rank: 3Rank: 3
来 自:运城
等 级:论坛游侠
帖 子:82
专家分:104
注 册:2010-5-12
得分:0 
回复 4楼 南国利剑
关于变量生存期的问题我还是很晕啊,是不是一执行玩那个{}里的char p 就没了?可后面那delet是干什么用的啊?
2010-05-26 17:13
fanfan320
Rank: 3Rank: 3
来 自:运城
等 级:论坛游侠
帖 子:82
专家分:104
注 册:2010-5-12
得分:0 
回复 3楼 cnfarer
P的生存期我不是很懂哎,如果改成
#include"stdio.h"
#include"iostream.h"
char *getmemory(void)
{char *p;
p=new char[50];
    p="hello word";
return p;
}
void main()
{
char *str=NULL;
str=getmemory();
printf(str);
getchar();

}

就可以了。问什么?望大侠能帮小弟解惑。小弟是自学的,没老师指导,很困难的!
2010-05-26 17:20
lscalin
Rank: 6Rank: 6
来 自:周总理故乡
等 级:侠之大者
威 望:1
帖 子:91
专家分:405
注 册:2010-5-10
得分:0 
你用NEW分配的内存空间,如果不去DELETE的话会一直存在,而你一开始的只是作用在你的函数内,记得用了NEW就一定要去回收,

灵感不是曹操,说来就来。
2010-05-26 19:08
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
得分:0 
回复 6楼 fanfan320
这就是堆和栈的差别!

★★★★★为人民服务★★★★★
2010-05-26 19:43
fanfan320
Rank: 3Rank: 3
来 自:运城
等 级:论坛游侠
帖 子:82
专家分:104
注 册:2010-5-12
得分:0 
回复 7楼 lscalin
呵呵,知道了,谢谢
2010-05-27 11:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-307951-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.191194 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved