在MFC中为什么我new了对象,但用delete却总是报错呢?

new了之后要delete总是报错TiXmlDocumentGrammar;TiXmlElement*define=newTiXmlElement("DEFINE");r... new 了之后 要delete总是报错
TiXmlDocument Grammar;
TiXmlElement *define = new TiXmlElement("DEFINE");
root->LinkEndChild(define);

TiXmlElement *ids = new TiXmlElement("ID");
ids->SetAttribute("NAME",SCmd);
ids->SetAttribute("VAL",char_Val);
define->LinkEndChild(ids);

TiXmlElement *rule = new TiXmlElement("RULE");
rule->SetAttribute("NAME",LCmd);
rule->SetAttribute("ID",SCmd);
rule->SetAttribute("TOPLEVEL","ACTIVE");
root->LinkEndChild(rule);
TiXmlElement *L = new TiXmlElement("L");
rule->LinkEndChild(L);
TiXmlElement *P = new TiXmlElement("P");
P->LinkEndChild(new TiXmlText(ChiCmd));
L->LinkEndChild(P);

Grammar.SaveFile("res\\CmdGrammar.xml");
Grammar.Clear();
/*delete decl;
delete root;
delete define;
delete ids;
delete rule;
delete L;
delete P;*/
delete后就报错
展开
 我来答
fly_fire
2009-04-14 · TA获得超过617个赞
知道小有建树答主
回答量:579
采纳率:0%
帮助的人:308万
展开全部
江半仙 请不要误导了,delete一个空指针根本没有关系,有关系的是delete完这个指针没有设置为空,那样就变成一个野指针了。

我看你给出的程序并不完整,不过我觉得tinyxml应该提供了对应的内存管理,只要删除根或者根本不用delete会自动帮你delete,这点你最好看下tinyxml的帮助。

至于会崩溃的问题建议你还是debug下应该是野指针的问题。
江半仙3e6e
2009-04-14 · TA获得超过4890个赞
知道大有可为答主
回答量:2251
采纳率:0%
帮助的人:1547万
展开全部
那就可能是你的new运算符操作失败了。
对于空指针当然不能delete
一般都是调用delete之前先对指针进行有效性检验:ASSERT(p)/ASSERT_VALID(p)之类的。
然后在delete.防止同一对象被delete多次或者对空对象delete

希望对你有所帮助!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LongNotDragon
2009-04-14 · TA获得超过151个赞
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:178万
展开全部
是delete 到第几个出错的.
检查指针是否为空.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GwannaR
2009-04-14
知道答主
回答量:30
采纳率:0%
帮助的人:25.8万
展开全部
把具体错误贴出来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式