ofstream在极其简单的程序(GCC/Code::Blocks)中首次输出时崩溃
ofstream crashes on first output in extremely simple program (GCC/Code::Blocks)
我有一个跨平台的日志记录应用程序,我周末在Windows上使用MSVC开发,然后在今天早上使用GCC/Code::Blocks在我的Linux盒子上,一旦它使用ofstream打开输出文件就会崩溃。
具体代码如下所示,实际上是程序中运行的前 8 行
stringstream strFile;
strFile<<filename;
strFile<<".result.out";
out.open(strFile.str().c_str());
out<<"Count"<<"t";
out<<"TM"<<"t";
out<<"Type"<<"t";
out<<"Seconds"<<"t";
在找出问题后,我后来制作了一个具有相同症状的最小应用程序
。#pragma pack(1) // remove this and it will run without incident
#include <fstream>
using namespace std;
int main()
{
ofstream out;
out.open("test.txt");
for(int x = 0;x < 10000; x++)
{
out<<"This is a test"<<endl; // crashes on first output
}
out.close();
return 0;
}
该#pragma pack(1)
更改所有后续包含的头文件的 ABI,使标准C++库(.so
或.a
(与您的应用程序不兼容。
解决方案是 删除该#pragma pack(1)
.将填料单独应用于您的结构。
我强烈建议大家停止使用这些pragma pack
属性(因为他们可以逃脱,我也在生产中看到这种情况(。
相反,根据需要使用编译器的语法(即 attribute packed
(。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 在虚幻引擎中删除NXOpen对象时崩溃
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- Visual Studio在尝试读取resource.txt文件时崩溃
- ofstream在极其简单的程序(GCC/Code::Blocks)中首次输出时崩溃