C++ 发布运行时错误VS2008-特定于问题

C++ 发布运行时错误VS2008-特定于问题,c++,visual-studio-2008,static-libraries,C++,Visual Studio 2008,Static Libraries,我有一个代码段,当我在调试模式下执行它时,它工作得非常好,但是当我在发布模式下执行它时,它会给出一个运行时错误。这是一个基于控制台的应用程序,我添加了一个外部静态库 问题不在于这段代码,因为它只有在使用库时才会崩溃。请记住,它在调试模式下工作得非常好。 提前感谢您的时间。仅仅因为它在调试模式下工作正常并不意味着没有问题。更改为释放模式将删除缓冲区填充,打开视错觉等…因此它不是完全相同的代码段 你有没有试过在里面插入一些断点,看看它能走多远,并试着诊断它在哪里崩溃 你打电话给哪个图书馆?你在传递缓

我有一个代码段,当我在调试模式下执行它时,它工作得非常好,但是当我在发布模式下执行它时,它会给出一个运行时错误。这是一个基于控制台的应用程序,我添加了一个外部静态库

问题不在于这段代码,因为它只有在使用库时才会崩溃。请记住,它在调试模式下工作得非常好。
提前感谢您的时间。

仅仅因为它在调试模式下工作正常并不意味着没有问题。更改为释放模式将删除缓冲区填充,打开视错觉等…因此它不是完全相同的代码段

你有没有试过在里面插入一些断点,看看它能走多远,并试着诊断它在哪里崩溃


你打电话给哪个图书馆?你在传递缓冲区吗?您是否正确初始化了它?

仅仅因为它在调试模式下工作正常并不意味着没有问题。更改为释放模式将删除缓冲区填充,打开视错觉等…因此它不是完全相同的代码段

你有没有试过在里面插入一些断点,看看它能走多远,并试着诊断它在哪里崩溃


你打电话给哪个图书馆?你在传递缓冲区吗?您是否正确初始化了它?

您正在使用的库可能有调试版本和发布版本吗?您可能正在两个版本中链接调试版本?

您正在使用的库可能有调试版本和发布版本吗?您可能正在两个版本中链接调试版本?

如果您说由于缓冲区溢出而导致崩溃,请使用诸如之类的工具来诊断缓冲区溢出发生的位置

在许多情况下,代码在调试版本中工作完全正常,但在发布版本中崩溃。最常见的解释是:

  • 由于
    #ifdef\u DEBUG
    部分中的代码不同,执行或类大小可能不同
  • 在Windows上,未初始化的变量在调试生成中初始化为零。在发布版本中,它们将是随机的

如果您说由于缓冲区溢出而导致崩溃,请使用诸如之类的工具诊断缓冲区溢出发生的位置

在许多情况下,代码在调试版本中工作完全正常,但在发布版本中崩溃。最常见的解释是:

  • 由于
    #ifdef\u DEBUG
    部分中的代码不同,执行或类大小可能不同
  • 在Windows上,未初始化的变量在调试生成中初始化为零。在发布版本中,它们将是随机的

如果您遇到错误“defaultlib'msvctd'与其他lib的使用冲突”;如果您的问题可能是由于链接到不同版本的运行库而引起的,我不会感到惊讶。
确保所有exe/libs/dll文件都链接到相同版本的运行时(静态或动态)

如果您遇到错误“defaultlib'msvctd'与其他lib的使用冲突”;如果您的问题可能是由于链接到不同版本的运行库而引起的,我不会感到惊讶。
确保所有exe/libs/dll文件都链接到相同版本的运行时(静态或动态)

如果没有引发崩溃的代码片段和确切的运行时错误,您的问题将无法回答。事实上,请告诉我们运行时错误是什么。您是否收到任何编译时警告?您应该找出它在哪里崩溃(使用printfs、sleep函数、文件写入或任何您拥有的方法,甚至在发行版中可以进行调试)。找到问题所在后…我得到的编译时警告如下:1-警告LNK4099:PDB'vc90.PDB'未与“.\Bitmap.lib 2-警告LNK4075:忽略“/EDITANDCONTINUE”,因为“/OPT:ICF”3-警告LNK4098:defaultlib'msvctd”与其他lib的使用冲突;use/NODEFAULTLIB:library,但我只在调试模式下得到第一个,当我尝试使用属于我使用的静态库的方法时,它会崩溃。它给出了以下错误:hw4-13313-3.exe中发生缓冲区溢出,该溢出破坏了程序的内部状态。@JohanR准确地回答了您的问题。此警告消息的关键行是
LNK4098:defaultlib'msvctd'与其他lib的使用冲突;使用/NODEFAULTLIB:library
,这意味着某些对象文件指定它是使用调试CRT而不是释放CRT生成的。如果没有引发崩溃的代码片段和确切的运行时错误,您的问题将无法回答。确实,请告诉我们运行时错误是什么。您是否收到任何编译时警告?您应该找出它在哪里崩溃(使用printfs、sleep函数、文件写入或任何您拥有的方法,甚至在发行版中可以进行调试)。找到问题所在后…我得到的编译时警告如下:1-警告LNK4099:PDB'vc90.PDB'未与“.\Bitmap.lib 2-警告LNK4075:忽略“/EDITANDCONTINUE”,因为“/OPT:ICF”3-警告LNK4098:defaultlib'msvctd”与其他lib的使用冲突;use/NODEFAULTLIB:library,但我只在调试模式下得到第一个,当我尝试使用属于我使用的静态库的方法时,它会崩溃。它给出了以下错误:hw4-13313-3.exe中发生缓冲区溢出,该溢出破坏了程序的内部状态。@JohanR准确地回答了您的问题。此警告消息的关键行是
LNK4098:defaultlib'msvctd'与其他lib的使用冲突;使用/NODEFAULTLIB:library
,这意味着某些对象文件指定它是使用调试CRT而不是发布CRT生成的。当我尝试使用属于我使用的静态库的方法时,它会崩溃。它给出了以下错误