在QNX中为std :: basic_ostream实例化插入输出时出现内存故障

时间:2019-03-07 13:18:17

标签: c++ qnx

我有以下情况:

#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上则不能:\

您有什么解释吗?提示吗?

1 个答案:

答案 0 :(得分:1)

问题是您使用的basic_ostream默认构造函数按照标准不存在。我不知道为什么g ++和QCC可以成功编译您的代码,但是它们不应该。

无论如何,使用非标准化功能会揭示非标准化行为,在您的情况下是崩溃。我不知道gcc文档中的任何地方都记录了默认构造函数的正确用法,但是只是避免使用它,而是使用the correct constructor应该可以解决您的问题。