0

我有一个带有调试和发布版本的 VS 2005 C++ 项目。我尝试了以下 4 件事:

  1. 通过 Visual Studio 构建一个 Debug 可执行文件,并通过 Visual Studio 运行它。
  2. cd'ing 到vstudio/debug.
  3. 通过 Visual Studio 构建 Release 可执行文件,并通过 Visual Studio 运行它。
  4. cd'ing 到vstudio/release.

前3个全部成功:程序运行完成。

然而,第四个在运行时崩溃。调试显示罪魁祸首是对malloc()operator 内部的调用new()。相关上下文如下所示:

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

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

4

2 回答 2

1

您可能有一个损坏的堆。这可能是由于指针写入分配的内存之外造成的。

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

我不了解您的环境,但您可能应该使用 BoundsChecker 之类的工具来查找错误。

于 2009-04-20T14:27:27.450 回答
0

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

测试这一点的一个好方法是尝试在 Windows 命令 shell (cmd.exe) 下运行,看看是否会遇到相同的错误。

于 2009-04-20T14:39:12.677 回答