使用 cout 打印字符串时C++代码块中的运行时错误<<
C++ runtime errors in CodeBlocks when printing strings with cout <<
我最近开始使用CodeBlocks,并开始遇到奇怪的运行时错误,我可以追溯到使用cout<lt;。例如,即使是以下。。
#include <string>
#include <iostream>
int main()
{
std::string str;
str = "Hi!";
std::cout << str << std::endl;
return 0;
}
导致错误。它会编译得很好(使用Borland),但当我运行它时,我会看到一个弹出窗口,上面写着"test.exe已停止工作",在控制台中我会收到消息:
Process returned -1073741819 (0xC0000005) execution time : 1.526 s
Press any key to continue.
它在MS Visual C++和Ubuntu中的G++中编译并运行良好。。任何想法都将不胜感激!
干杯,Weatherwax
我的一次性评论最终帮助解决了这个问题,所以在这里它被打包为未来用户的答案:
这家伙也有类似的问题,最终成为了一个链接器问题,他固定的修复是线程中的最后一篇文章,尽管正在阅读整个线程可能对您有用。
长话短说:Borland编译器使用起来有点过时和烦人。最终成为borland内部的一个链接器问题。最好使用不同的编译器,如GCC/G++或Visual Studio编译器。
这个答案是为了详细说明问题的根本原因。
程序崩溃的原因是链接了错误的运行库。具体来说,您的示例被编译为单线程对象文件(默认),但链接步骤是使用多线程cw32mt.lib
运行时——末尾的"mt"后缀表示多线程。
解决方案是确保程序的运行时被编译为与链接的运行时匹配。有几种方法可以做到这一点。
重要的bcc32编译开关:
-tW Windows GUI program. WinMain() is expected
-tWC Windows Console program. main() is expected. default.
-tWR Use dynamically linked runtime. Absence implies static runtime linkage.
-tWM Use multithreaded runtime. Absence implies single thread.
将示例程序编译为单线程程序,如下所示:
bcc32-example.obj-c example.cpp
ilink32-ap example.obj c0x32,example.exe,,cw32.lib import32.lib,,
或者您可以像这样将其编译为多线程(注意-tWM
开关与cw32mt.lib
匹配):
bcc32-tWM-oexample.obj-c example.cpp
ilink32-ap example.obj c0x32,example.exe,,cw32mt.lib import32.lib,,
第三种更容易出错的方法是不自己调用链接器。相反,让编译器间接驱动链接器(类似于gcc):
bcc32-tWM-oexample.obj-c example.cpp
bcc32-tWM example.obj-eexample.exe
对于您的简单示例,它甚至可以缩短为:
bcc32-example.exe example.cpp
最后,您可以多次通过-tW
开关。例如,此命令将您的示例编译为具有多线程支持和动态运行时链接的控制台程序:
bcc32-tWM-tWR-tWC-eexample.exe example.cpp
生成的example.exe
可执行文件要小得多,其导入表中有一个CC3250MT.DLL
条目,用于确认borland运行时是动态链接的。
在没有首先调查用户错误作为潜在原因的情况下,我们不应该假设一个无法运行的程序是由不符合标准或我们使用的工具中的错误引起的(即使在这种情况下,这样做很诱人)。在OP的情况下,代码::block IDE没有为所使用的工具链设置正确的命令。
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 对单向链表进行排序时出现运行时错误
- 为什么此代码存在运行时错误?
- 你能解释一下什么运行时错误是如何解决它的吗?
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- 运行时错误:引用绑定到类型为"int"的空指针
- 为什么当 vector 为空时会显示运行时错误?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 运行时错误:矢量下标超出范围:正在检查空集
- 分配给gslice_array会导致运行时错误
- cout 新创建的对象引发运行时错误
- C++在使用std::multimap时出现运行时错误的几率很小
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 试图找出为什么我会收到运行时错误?
- 迭代二维矢量时发生运行时错误
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误