结构体定义:
typedef struct tagCATALOGNODE
{
WCHAR *pwzCatalogID;
WCHAR *pwzCatalogName;
tagCATALOGNODE *pCatalogNode;
LONG lpChildLength; //兄弟节点个数
}CATALOGNODE;释放函数我是用递归实现的。
void CInfoShareXCAPXMLParser::ReleaseCatalogNode(CATALOGNODE *pChildNode)
{
int i;
i = 0;
while (i<= (pChildNode + i)->lpChildLength)
{
if (NULL != (pChildNode + i)->pCatalogNode)
{
ReleaseCatalogNode((pChildNode + i)->pCatalogNode); }
if (NULL != (pChildNode +i)->pwzCatalogID)
{
delete[] (pChildNode +i)->pwzCatalogID;
(pChildNode +i)->pwzCatalogID = NULL;
} if (NULL != (pChildNode + i)->pwzCatalogName)
{
delete[] (pChildNode)->pwzCatalogName;
(pChildNode + i)->pwzCatalogName = NULL;
}
if (i == (pChildNode + i)->lpChildLength)
{
delete[](pChildNode);
//pChildNode = NULL;
}
i++;
}
}程序运行到最里面的子节点就死了,帮我看看问题出在哪里?
typedef struct tagCATALOGNODE
{
WCHAR *pwzCatalogID;
WCHAR *pwzCatalogName;
tagCATALOGNODE *pCatalogNode;
LONG lpChildLength; //兄弟节点个数
}CATALOGNODE;释放函数我是用递归实现的。
void CInfoShareXCAPXMLParser::ReleaseCatalogNode(CATALOGNODE *pChildNode)
{
int i;
i = 0;
while (i<= (pChildNode + i)->lpChildLength)
{
if (NULL != (pChildNode + i)->pCatalogNode)
{
ReleaseCatalogNode((pChildNode + i)->pCatalogNode); }
if (NULL != (pChildNode +i)->pwzCatalogID)
{
delete[] (pChildNode +i)->pwzCatalogID;
(pChildNode +i)->pwzCatalogID = NULL;
} if (NULL != (pChildNode + i)->pwzCatalogName)
{
delete[] (pChildNode)->pwzCatalogName;
(pChildNode + i)->pwzCatalogName = NULL;
}
if (i == (pChildNode + i)->lpChildLength)
{
delete[](pChildNode);
//pChildNode = NULL;
}
i++;
}
}程序运行到最里面的子节点就死了,帮我看看问题出在哪里?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货