2016-01-24 76 views
0

我想編寫此代碼以執行與我的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); 
    } 
} 

回答

0

最有可能「運行時檢查失敗#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'爲零,我忘了在之前的編輯中添加行。 –

相關問題