运行时检查失败#2 - 变量(ItemFrom)周围的堆栈损坏
问题描述:
我想编写此代码以执行与我的copyItemFromTree
方法有关的事情,但在函数结束时,我有运行时检查失败#2 ...错误,你能帮我解决这个问题吗? pFrom
和pTo
是Ctreecntrl
mfc对象;运行时检查失败#2 - 变量(ItemFrom)周围的堆栈损坏
TVITEM ItemFrom, ItemTo;
TCHAR szTextFrom[1024];
ItemFrom.pszText = szTextFrom;
ItemFrom.cchTextMax = 1024;
ItemFrom.hItem = hItem;
TCHAR szTextTo[1024];
ItemTo.pszText = szTextTo;
ItemTo.cchTextMax = 1024;
ItemTo.hItem = hItemInTo;
if (pFrom->GetItem(&ItemFrom) && pTo->GetItem(&ItemTo))//I think the problem is here but i don't know how to solve this.
{
if (ItemFrom.cChildren)
{
ItemTo.mask = TVIF_CHILDREN;
ItemTo.cChildren = ItemFrom.cChildren;
pTo->SetItem(&ItemTo);
}
}
答
最有可能“运行时检查失败#2”是因为项目不会被初始化为零。蒙版也没有设置。这会导致未定义的行为。
请尝试以下并分开线,使其更容易调试:
TVITEM ItemFrom = { 0 };
TVITEM ItemTo = { 0 };
TCHAR szTextFrom[1024];
ItemFrom.pszText = szTextFrom;
ItemFrom.cchTextMax = 1024;
ItemFrom.hItem = hItem;
ItemFrom.mask = TVIF_TEXT;
TCHAR szTextTo[1024];
ItemTo.pszText = szTextTo;
ItemTo.cchTextMax = 1024;
ItemTo.hItem = hItemInTo;
ItemTo.mask = TVIF_TEXT;
ASSERT(pFrom->GetItem(&ItemFrom));
ASSERT(pTo->GetItem(&ItemTo));
if (pFrom->GetItem(&ItemFrom) && pTo->GetItem(&ItemTo))
{
...
}
这条线将不可复制的孩子:
ItemTo.mask = TVIF_CHILDREN ;
ItemTo.cChildren = ItemFrom.cChildren;
pTo->SetItem(&ItemTo);
你必须一对一复制儿从一棵树到另一棵树。您可以尝试如下所示:
if (hItemFrom)
pTo->InsertItem(pFrom->GetItemText(hItemFrom), hParent);
谢谢,我设置了面罩,问题解决了。 – reza
还要确保初始化'ItemFrom'和'ItemTo'为零,我忘了在之前的编辑中添加行。 –