Visual Studio 2005 C ++运行时新异常

时间:2009-04-20 14:19:23

标签: visual-c++ debugging release new-operator

我有一个包含Debug和Release版本的VS 2005 C ++项目。我尝试了以下四件事:

  1. 通过Visual Studio构建Debug可执行文件,并通过Visual Studio运行它。
  2. cd vstudio/debug之后,通过命令行(Cygwin)在外部运行内置(1)的可执行文件。
  3. 通过Visual Studio构建一个Release可执行文件,并通过Visual Studio运行它。
  4. cd vstudio/release之后,通过命令行(Cygwin)在外部运行内置(3)的可执行文件。
  5. 前3个都成功:程序运行完毕。

    然而,第四个在运行时崩溃。调试显示罪魁祸首是对运营商malloc()内的new()的调用。相关的上下文看起来像这样:

    template<typename T> class Foo {
        ...
        static void bar() {
            ...
            T* ptr = new T();
            ...
        }
        ...
    }
    

    如果有人能想到任何会导致我所描述的四分之三症状的问题,我们将不胜感激。

2 个答案:

答案 0 :(得分:1)

你可能有一个腐败的堆。这可能是由指针写在分配的内存之外引起的。

在调试模式下不会发生这种情况的一个可能原因是您只覆盖堆上的调试信息(在发布模式下不存在)。

我不了解你的环境但是你应该找一个像BoundsChecker这样的工具来找到它。

答案 1 :(得分:0)

我的第一个猜测是cygwin为你的程序构建使用的一些Windows DLL替换了DLL。

测试此方法的一个好方法是尝试在Windows命令shell(cmd.exe)下运行,看看是否收到同样的错误。