-1

在我的 mfc 应用程序中,我有一个富文本框,用户可以在其中输入字符串。当用户在富文本框中输入任何内容时,我调用了一个函数“FormatText(int start,int end)”来格式化输入的文本。在我写了以下代码的函数中

TCHAR *pBuffer = NULL;


try 
    {
        pBuffer = new TCHAR[nEnd - nStart + 1]; 
            ...
            ...
            ...
    } 
catch(...)
{
}


delete [] pBuffer;

但是当我在富文本框中输入任何值时,我得到堆内存损坏和程序崩溃的异常,
当我调试代码时,Visual Studio 在一行显示一个异常,

delete [] pBuffer;

有没有其他方法可以删除/释放内存。任何帮助,将不胜感激。

4

2 回答 2

4

您必须找到并修复损坏,而不是寻找另一种删除方式。堆损坏发生在 delete [] 操作之前的某个时间。该操作仅检测到它以前发生过。注释掉一些代码部分,和/或用琐碎的操作替换它们,直到损坏消失。这应该可以帮助您找出导致问题的代码。

于 2013-06-28T15:25:24.990 回答
0

你真的捕捉到所有异常并默默地丢弃它们吗?这里可能有一个失败的 new (std::bad_alloc)

是否对 nEnd 和 nStart 进行任何检查,确保“新”缓冲区的大小 > 0 ?

因此,您可能需要在删除 pBuffer 之前检查它是否为 NULL。

于 2013-06-28T09:16:22.733 回答