运行时检查失败#2 - 变量(ItemFrom)周围的堆栈损坏

问题描述:

我想编写此代码以执行与我的copyItemFromTree方法有关的事情,但在函数结束时,我有运行时检查失败#2 ...错误,你能帮我解决这个问题吗? pFrompToCtreecntrl 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); 
+0

谢谢,我设置了面罩,问题解决了。 – reza

+0

还要确保初始化'ItemFrom'和'ItemTo'为零,我忘了在之前的编辑中添加行。 –