【问题标题】:C++ invalid argument at memory location error内存位置错误的 C++ 无效参数
【发布时间】:2021-01-29 04:55:08
【问题描述】:

我试图从二进制文件中读取单个字节并将其转换为位集,然后将其打印到控制台,但是以下代码会引发错误。

ifstream test(filePath, ios::in | ios::binary);
char * byte = new char;
test.read(byte, 1);
cout << std::bitset<8>(byte);

program.exe 中 0x757DA842 处的未处理异常:Microsoft C++ 异常:内存位置 0x006FEBE4 处的 std::invalid_argument。

我似乎无法找出问题所在,并尝试了各种方法,知道如何解决这个问题吗?

谢谢

【问题讨论】:

    标签: c++ windows visual-c++


    【解决方案1】:

    在将byte 传递给std::bitset 的构造函数时,您需要取消对它的引用。


    查看std::bitset's constructors 的参考。

    您似乎想在该页面上调用构造函数编号 (2):

    bitset(unsigned long long)
    

    构造一个bitset,代表byte指向的char的位。

    实际上在调用构造函数编号 (4)(使用 CharT = char):

    template< class CharT >
    explicit bitset(
        const CharT* str,
        typename std::basic_string<CharT>::size_type
            n = std::basic_string<CharT>::npos,
        CharT zero = CharT('0'),
        CharT one = CharT('1')
    )
    

    使用默认的std::string::npos 作为第二个参数,这假定作为str 传递的指针指向'0''1' 字符的C 风格nul 终止字符串,并尝试构造bitset从那些。

    【讨论】:

      【解决方案2】:

      最后一行中的byte std::bitset&lt;8&gt;(byte) 不是字符而是指针。

      编辑到std::bitset&lt;8&gt;(*byte),新代码应该可以工作。

      阅读this answer了解更多详情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-03
        • 2018-10-11
        相关资源
        最近更新 更多