| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 711 人关注过本帖
标题:[求助]为什么内存错误?
只看楼主 加入收藏
asdffdsa
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-5-25
收藏
 问题点数:0 回复次数:3 
[求助]为什么内存错误?

void Deltree(BTNode *b)
{
if(b!=NULL)
{
Deltree(b->lchild);
Deltree(b->rchild);
free(b);
}
}//Recreate函数调用,用于删除原来的树
void Recreate(BTNode *&b)
{
char judge;
std::cout<<"将会删除原先二叉树,删除吗?(y/n)"<<endl;
std::cin>>judge;
if('Y'==toupper(judge))
{
Deltree(b);
std::cout<<"删除完毕"<<endl;
}
else
{
std::cout<<"错误,退出"<<endl;
return;
}

std::cout<<"请输入二叉树用括号表示法,以@结束。例:\"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))@\"";
std::cout<<endl;
std::cout<<"请输入:";
int top=-1;
BTNode *e;
e=NULL;
BTNode *s[30];
int k;
BTNode *p;
string chs;

std::cin>>chs;

string::iterator iter;
iter=chs.begin();

char ch;

ch=*iter;

while(ch!='@') //就是从这里开始起有错误的
{
switch(ch)
{
case '(':
top++;s[top]=p;k=1;break;
case ')':
top--;break;
case ',':
k=2;break;
default:
p=new BTNode;
p->data=ch;p->lchild=p->rchild=NULL;
if(e==NULL) e=p;
else
{
if(k==1) s[top]->lchild=p;
else s[top]->rchild=p;

}
}
iter++;
ch=*iter;
}
b=e;
}

搜索更多相关主题的帖子: 内存 
2006-06-07 14:49
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 

你的程序创建的时候没有错误,我断点运行过,是用a(b,c)@来创建的.
但是我发现你删除的时候,虽然可以运行成功,但是我发现了一个问题,是你用了free来释放new分配的内存
这是错误的做法,因为,C++在用new分配的内存的时候,调用了构造函数,用delete的时候就会调用析构函数,然后再释放空间,但是如果你直接用free,就不会调用析构函数,就立刻释放空间,这个问题很严重。虽然现在没有错误,一个原因可能你是用struct来定义BTNode,就没有发生太大的问题,但是在实际中开发,可能测试的时候都没有问题,但是它一定会在你重要的客户面前爆发!!


c++/C + 汇编 = 天下无敌
2006-06-07 22:19
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
所谓new就是运行时先malloc一个空间返回void*
然后new再把类型加上去
delete就是先把它的存储格式变换一下即变成void*
然后free

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-06-09 15:41
asdffdsa
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-5-25
收藏
得分:0 
谢谢阿  我在改一改试一试
2006-06-21 10:16
快速回复:[求助]为什么内存错误?
数据加载中...
 
   



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

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