如何解决内存位置错误处的 C++ 无效参数
我试图从二进制文件中读取单个字节并将其转换为位集,然后将其打印到控制台,但是以下代码引发了错误。
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++ 异常:std::invalid_argument 在内存位置 0x006FEBE4。
我似乎无法弄清楚出了什么问题,并尝试了各种方法,知道如何解决这个问题吗?
谢谢
解决方法
您需要在将 byte
传递给 std::bitset
的构造函数时取消引用它。
查看 std::bitset
's constructors 的参考。
您似乎想在该页面上调用构造函数编号 (2):
bitset(unsigned long long)
构造一个 bitset
来表示 char
指向的 byte
的位。
您实际上调用构造函数编号 (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
传递的指针指向一个 C 风格的以 nul 结尾的字符串 '0'
和 '1'
并尝试从中构造 bitset
。
byte
中的 std::bitset<8>(byte)
不是字符而是指针。
编辑为 std::bitset<8>(*byte)
而不是代码新代码应该可以工作。
阅读this answer了解更多详情。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。