请问这个程序段哪里出错了?运行的时候会死掉

song1014 2002-08-14 05:28:54
void CParserDlg::DisplayChildren(IXMLDOMNodePtr pParent)
{

// display the current node's name
DisplayChild(pParent);
// simple for loop to get all children
for (IXMLDOMNodePtr pChild = pParent->firstChild;
NULL != pChild;
pChild = pChild->nextSibling)
{
// for each child, call this function so that we get
// its children as well
DisplayChildren(pChild);
}


}

void CParserDlg::DisplayChild(IXMLDOMNodePtr pChild)
{
if (pChild==m_pDocRoot)
{
hRoot=m_TreeView.InsertItem(m_pDocRoot->nodeName);
hParentNode=hRoot;
}
else if (NODE_ELEMENT == pChild->nodeType)
{
hNode[i]=m_TreeView.InsertItem(pChild->nodeName,hParentNode);
if (pChild->firstChild != NULL)
hParentNode=hNode[i];
else if (pChild->nextSibling != NULL)
hParentNode=m_TreeView.GetParentItem(hNode[i]);
else
hParentNode=FindParentNode(hNode[i]);
i++;
}
else if (NODE_TEXT == pChild->nodeType)
{
hNode[i]=m_TreeView.InsertItem(pChild->nodeName,hParentNode);
m_TreeView.SetItemText(hNode[i],pChild->nodeName+":"+pChild->text);
hParentNode=FindParentNode(hNode[i]);
i++;
}
else if (NODE_COMMENT == pChild->nodeType)
{
hNode[i]=m_TreeView.InsertItem(pChild->nodeName,hParentNode);
m_TreeView.SetItemText(hNode[i],pChild->nodeName+":"+pChild->text);
if (pChild->nextSibling != NULL)
hParentNode=m_TreeView.GetParentItem(hNode[i]);
else
hParentNode=FindParentNode(hNode[i]);
i++;
}
else if (NODE_CDATA_SECTION == pChild->nodeType)
{
hNode[i]=m_TreeView.InsertItem(pChild->nodeName,hParentNode);
m_TreeView.SetItemText(hNode[i],pChild->nodeName+":"+pChild->text);
hParentNode=FindParentNode(hNode[i]);
i++;
}
}

HTREEITEM CParserDlg::FindParentNode(HTREEITEM Node)
{
while (m_TreeView.GetNextSiblingItem(m_TreeView.GetParentItem(Node)) == NULL)
{
Node=m_TreeView.GetParentItem(Node);
}
Node=m_TreeView.GetParentItem(m_TreeView.GetParentItem(Node));
return Node;
}
请问这个程序段哪里出错了?运行的时候会死掉
...全文
16 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
song1014 2002-08-15
  • 打赏
  • 举报
回复
是不是while语句出错了
song1014 2002-08-15
  • 打赏
  • 举报
回复
我是要把一个xml文档的节点插到一个树型控件中,hParentNode是用来记录接下来要插的那个节点的父节点的
song1014 2002-08-15
  • 打赏
  • 举报
回复
void CParserDlg::DisplayChildren(IXMLDOMNodePtr pParent)
{

// display the current node's name
DisplayChild(pParent);
// simple for loop to get all children
for (IXMLDOMNodePtr pChild = pParent->firstChild;
NULL != pChild;
pChild = pChild->nextSibling)
{
// for each child, call this function so that we get
// its children as well
DisplayChildren(pChild);
}
}
这个函数肯定是对的,问题出在下面,可是我看不出,麻烦哪位帮忙看一下
alanwang_ 2002-08-15
  • 打赏
  • 举报
回复
递归操作就是麻烦,不小心就成死循环了!
同意sjzxyg(小小鸟) 的意见
sjzxyg 2002-08-15
  • 打赏
  • 举报
回复
跟踪一下看看
孙亖 2002-08-15
  • 打赏
  • 举报
回复
guanzhu
song1014 2002-08-14
  • 打赏
  • 举报
回复
好像问题出在HTREEITEM CParserDlg::FindParentNode(HTREEITEM Node)
这个函数里。NODE_ELEMENT ,NODE_TEXT ,NODE_COMMENT ,NODE_CDATA_SECTION 这几个里面的操作都差不多的。void CParserDlg::DisplayChildren(IXMLDOMNodePtr pParent)里是一个递归操作
alanwang_ 2002-08-14
  • 打赏
  • 举报
回复
太长了
在哪里死掉?
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧