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

来源:百度知道 编辑:UC知道 时间:2024/09/25 17:12:12
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一个空指针根本没有关系,有关系的是delete完这个指针没有设置为空,那样就变成一个野指针了。

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

至于会崩溃的问题建议你还是debug下应该是野指针的问题。

那就可能是你的new运算符操作失败了。
对于空指针当然不能delete
一般都是调用delete之前先对指针进行有效性检验:ASSERT(p)/ASSERT_VALID(p)之类的。
然后在delete.防止同一对象被delete多次或者对空对象delete

希望对你有所帮助!

是delete 到第几个出错的.
检查指针是否为空.

把具体错误贴出来