Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我的代码有什么问题?为什么会出现错误消息_C++_Qt_Qbytearray - Fatal编程技术网

C++ 我的代码有什么问题?为什么会出现错误消息

C++ 我的代码有什么问题?为什么会出现错误消息,c++,qt,qbytearray,C++,Qt,Qbytearray,下面的代码运行得很好,如果在运行错误消息后忽略它,我可以得到想要的结果。我得到的错误是:调试错误! 程序:c:\qt\qt5.5.1\5.5\msvc2013\U 64\bin\QT5corder.dll 模块:5.5.1 文件:global\qglobal.cpp 电话:2966 如果我选择忽略错误,控制台应用程序会正确显示所有数据,它会显示正确的位数组,它还会显示二进制数组的正确字符,最后它还会为字节字符提供正确的字节十进制值 这是console中的错误: 断言:文件c:\work\bui

下面的代码运行得很好,如果在运行错误消息后忽略它,我可以得到想要的结果。我得到的错误是:调试错误! 程序:c:\qt\qt5.5.1\5.5\msvc2013\U 64\bin\QT5corder.dll 模块:5.5.1 文件:global\qglobal.cpp 电话:2966

如果我选择忽略错误,控制台应用程序会正确显示所有数据,它会显示正确的位数组,它还会显示二进制数组的正确字符,最后它还会为字节字符提供正确的字节十进制值

这是console中的错误: 断言:文件c:\work\build\qt5\u workdir\w\s\qtbase\sr中的“uint(i) 这是正确的输出:

位为:QBitArray(01100011)

字节字符是“c”

十进制格式字节为:99

使用的代码:

    QBitArray Alphabits(8);
    Alphabits[0] = false;
    Alphabits[1] = true;
    Alphabits[2] = true;
    Alphabits[3] = false;
    Alphabits[4] = false;
    Alphabits[5] = false;
    Alphabits[6] = true;
    Alphabits[7] = true;

    QByteArray Alphabytes;
    // Convert from QBitArray to QByteArray
    for(int b=0; b<Alphabits.count();++b) {
        Alphabytes[b/8] = (Alphabytes.at(b/8) | ((Alphabits[b]?1:0)<<(7-(b%8))));
    }

    qDebug() << "Bits are:" << Alphabits;
    qDebug() << "Byte Char is" << Alphabytes;
    qDebug() << "Decimal format Bytes are: "<< static_cast<quint8>(Alphabytes[0]);
qbit数组字母位(8);
字母位[0]=假;
字母位[1]=真;
字母位[2]=真;
字母位[3]=假;
字母位[4]=假;
字母位[5]=假;
字母位[6]=真;
字母位[7]=真;
QByteArray字母字节;
//从QBitArray转换为QByteArray

对于(int b=0;b好的,我知道问题出在哪里。这是因为当你在
for
中调用
Alphabytes时。在(b/8)
第一次,Alphabytes
的大小是零,所以你尝试获取超出数组范围的索引。用
Alphabytes[b/8]=(Alphabytes[b/8]替换它|.

好的,我知道问题出在哪里了。这是因为当你在
for
中调用
Alphabytes时。在(b/8)
第一次,
Alphabytes
的大小是零,所以你尝试获取超出数组范围的索引。用
Alphabytes[b/8]=(Alphabytes[b/8]替换它|·············································。。。

除非有人能弄清楚为什么这个错误只在调试时发生…

在发布模式下,似乎所有的东西都会编译,甚至没有检测到错误或警告等,所以这很奇怪,它只在调试模式下发生,所以我想我会在QT bug跟踪中报告这一点,也许。。。
除非有人能找出为什么只有在调试时才会发生此错误…

我不确定,但我认为您应该使用
重新解释\u cast
而不是
静态\u cast
我不确定,但我认为您应该使用
重新解释\u cast
而不是
静态\u cast