【问题标题】:visual studio 2008 solution release version runtime fatal errorvisual studio 2008 解决方案发布版运行时致命错误
【发布时间】:2012-10-09 13:08:25
【问题描述】:

我有一个 Visual Studio 2008 解决方案,它由一些项目组成,并将 dll 与他们的标题一起使用。在调试版本中,它(解决方案)工作得非常好。在发布版本中它编译成功,但是在执行一些在 dll 文件中定义的函数时它会失败。

正如我所说,该解决方案在调试模式下运行良好,并且选项设置正确。试过关掉
优化,打开调试信息,没用。问题的原因可能是什么?

【问题讨论】:

  • 错误是什么?尝试把 __declspec(dllexport) void fn(..)
  • 最有可能导致调试和发布行为不同的错误是未初始化的变量。

标签: c++ debugging visual-studio-2008 release runtime-error


【解决方案1】:

我以前见过这种情况很多次。在几乎每一种情况中,发现问题是写入数组或其他数据结构时出现越界错误。在其他情况下,使用了未初始化的变量。

您的代码中有错误。这是肯定的。当您在调试设置下构建时,编译器会为您做很多事情来掩盖某些类型的问题。编译器将编写代码对一些东西进行零初始化,从而掩盖未初始化的变量问题。

我会尝试的第一件事是将警告级别提高到最高设置。无论如何,你应该一直这样做。这通常会揭示问题。请务必修复编译器告诉您的问题。不要用 #pragmas 或 chintzy casts 来掩盖它们。下一步通过您的代码来隔离问题。这可能既困难又耗时,但有一线希望。无论问题是什么,您重复该错误的可能性与识别和修复错误的时间和难度成反比。 :)

【讨论】:

  • 是的,我现在意识到我有一个类型为 vector 的名为 deviceList 的变量,其中 'device' 是一个结构。它似乎导致了大多数问题。我在一个类中声明了它,但据我所知,STL 类“向量”调用它的构造函数来初始化 deviceList。在这里看不到任何错误。还是编译器可以因为优化而忽略声明?
  • @Nabijon:极不可能。把任何关于编译器在这里出错的想法都抛在脑后吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 2011-09-02
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多