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

Run-Time Check Failure #2 - Stack around the variable (ItemFrom) was corrupted

本文关键字:周围 堆栈 已损坏 ItemFrom 失败 检查 变量 运行时      更新时间:2023-10-16

我想编写这段代码来做一些与我的copyItemFromTree方法相关的事情,但是在我的函数结束时,我有运行时检查失败#2...错误,你能帮我解决这个问题吗? pFrompTo 是 MFC 对象Ctreecntrl;

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);