我有以下情况:
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <ostream>
class File_ostream final : public std::basic_ostream<char, std::char_traits<char>>
{
};
int main()
{
const std::string input_file{"file_tests/test.txt.gz"};
std::ifstream ifs{input_file, std::ios_base::in | std::ios_base::binary};
File_ostream file_os{};
file_os << ifs.rdbuf(); // Memory fault (core dumped)
}
将输出插入file_os
并创建核心转储时,我的程序总是崩溃。
该代码在Linux上可以正常运行,但在QNX上则不能:\
您有什么解释吗?提示吗?
答案 0 :(得分:1)
问题是您使用的basic_ostream
默认构造函数按照标准不存在。我不知道为什么g ++和QCC可以成功编译您的代码,但是它们不应该。
无论如何,使用非标准化功能会揭示非标准化行为,在您的情况下是崩溃。我不知道gcc文档中的任何地方都记录了默认构造函数的正确用法,但是只是避免使用它,而是使用the correct constructor应该可以解决您的问题。