多次调用CTreeCtrl的GetItemText方法出错,大家帮忙看下吧

来源:百度知道 编辑:UC知道 时间:2024/05/09 16:54:26
我写了一个解析CTreeCtrl树路径的方法,里面需要多次调用GetItemText方法,当我调用三四千次的时候没问题,但是调用六七千次以上时,程序就报错,不懂为什么。我把我的代码贴出来。
我是循环调用这个方法的,每次将树的一个节点传进来。
//获得叶节点全路径
CString CDlgInstInit::GetFullPath(HTREEITEM hItem,UINT nFlag)
{
CString strTemp="",strLD="";
HTREEITEM hParent=hItem;
while(hParent)
{
strTemp = m_wndTree.GetItemText( hParent ) + strTemp; //在这个地方程序就出错
strTemp = CString(".") + strTemp ;
hParent = m_wndTree.GetParentItem(hParent);
}
if(nFlag==1)
strTemp=strTemp+"1";
strTemp=strTemp.Mid(1);
HTREEITEM hTemp=m_wndTree.GetRootItem();
CUnitBase *pDataUnit = (CUnitBase*) m_wndTree.GetItemData(hTemp);
strLD=pDataUnit->m_pParentUnit->GetChildrenUnitByName("inst")->GetText();
strTemp=strLD+"/"+strTemp;
return strTemp;
}
魔高丈,我按你说的改了还是报一样的错误
First-chance exception in test.exe (NTDLL.DLL): 0xC00000FD: Stack Overflow.

不知道你的strTemp在六七千此后的长度是多少。

CString strTemp="";这样定义strTemp是在栈上申请的空间,大小有限制。
换成这样试试:
CString *strTemp = new CString();
这样定义在堆上申请内存的,它的大小应该是有内存确定的。

使用的时候用:
*strTemp = m_wndTree.GetItemText( hParent ) + *strTemp;

补充:试试strTemp不要在局部函数内定义,定义成全局的或在类中定义试试
还有就是,不是strTemp出的问题,而是其他地方出了问题,但到那一行才报错。

我现在怀疑不是strTemp的问题,而是其他有的地方出现了堆栈溢出。
有的时候出现溢出错误不是当时就能表现出来的,可能到其他的对内存的操作时才有表现。
只能给你这些建议了,你自己再仔细看看你的代码。