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

发布于 2024-07-18 05:05:40 字数 722 浏览 7 评论 0原文

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

  1. 通过 Visual Studio 构建调试可执行文件,并通过 Visual Studio 运行它。
  2. cdvstudio/debug 后,通过命令行 (Cygwin) 在外部运行 (1) 中内置的可执行文件。
  3. 通过 Visual Studio 构建 Release 可执行文件,并通过 Visual Studio 运行它。
  4. cdvstudio/release 后,通过命令行 (Cygwin) 在外部运行 (3) 中内置的可执行文件。

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

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

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

如果有人能想到任何会导致我描述的 4 中 3 症状的问题,我们将不胜感激。

I have a VS 2005 C++ project with both Debug and Release builds. I've attempted the following 4 things:

  1. Build a Debug executable through Visual Studio, and run it through Visual Studio.
  2. Run the executable built in (1) externally via command line (Cygwin) after cd'ing to vstudio/debug.
  3. Build a Release executable through Visual Studio, and run it through Visual Studio.
  4. Run the executable built in (3) externally via command line (Cygwin) after cd'ing to vstudio/release.

The first 3 all succeed: the program runs to completion.

The fourth, however, crashes at runtime. Debugging shows that the culprit is the call to malloc() inside the operator new(). The relevant context looks something like this:

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

If anyone can think of any problem which would lead to the 3-out-of-4 symptoms I describe, it would be much appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

本宫微胖 2024-07-25 05:05:40

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

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

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

You probably have a corrupt heap. This can be caused by a pointer writing outside the allocated memory.

A possible reason why this does not happen in debug mode is that you only overwrite debug information on the heap (which is not present in release mode).

I don't know you environment but you should probably get a tool like BoundsChecker to find the bug.

ι不睡觉的鱼゛ 2024-07-25 05:05:40

我的第一个猜测是 cygwin 有一些替代 DLL 来替代您的程序构建时使用的某些 Windows DLL。

测试此问题的一个好方法是尝试在 Windows 命令 shell (cmd.exe) 下运行,看看是否出现相同的错误。

My first guess would be that cygwin has replacement DLL's for some of the Windows DLL's that your program was built to use.

A good way to test this would be to try running under the Windows command shell (cmd.exe) and see if you get the same error.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文