我的代码有什么问题?为什么错误信息
whats wrong in my code? why the error msg
下面的代码工作得很好如果我在 运行 之后忽略错误消息,我可以获得我想要的结果。我得到的错误是:调试错误!
Program:c:\qt\qt5.5.1.5\msvc2013_64\bin\Qt5Cored.dll
模块:5.5.1
文件:global\qglobal.cpp
线路:2966
.....
如果我选择忽略错误,控制台应用程序会正确显示所有数据,它会显示正确的位数组,它还会显示二进制数组的正确字符,最后它还会为字节字符提供正确的字节十进制值...
这是控制台中的错误:
断言:"uint(i) < uint(size())" 在文件 c:\work\build\qt5_workdir\w\s\qtbase\sr
c\corelib\tools\qbytearray.h,第 464 行
这是正确的输出:
位是:QBitArray(0110 0011)
字节字符是"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]);
好的,我知道问题出在哪里了。这是因为当你在 for
中第一次调用 Alphabytes.at(b/8)
时,Alphabytes
的大小为零,所以你尝试获取超出数组范围的索引。将其替换为 Alphabytes[b/8] = (Alphabytes[b/8] |......
.
似乎在发布模式下一切都可以编译,甚至没有检测到错误或警告等,所以这很奇怪,它只发生在调试模式下所以我想我可能会在 QT 错误跟踪中报告这个......
除非有人能弄清楚为什么这个错误只在调试时发生...
下面的代码工作得很好如果我在 运行 之后忽略错误消息,我可以获得我想要的结果。我得到的错误是:调试错误! Program:c:\qt\qt5.5.1.5\msvc2013_64\bin\Qt5Cored.dll 模块:5.5.1 文件:global\qglobal.cpp 线路:2966 .....
如果我选择忽略错误,控制台应用程序会正确显示所有数据,它会显示正确的位数组,它还会显示二进制数组的正确字符,最后它还会为字节字符提供正确的字节十进制值...
这是控制台中的错误: 断言:"uint(i) < uint(size())" 在文件 c:\work\build\qt5_workdir\w\s\qtbase\sr c\corelib\tools\qbytearray.h,第 464 行
这是正确的输出:
位是:QBitArray(0110 0011)
字节字符是"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]);
好的,我知道问题出在哪里了。这是因为当你在 for
中第一次调用 Alphabytes.at(b/8)
时,Alphabytes
的大小为零,所以你尝试获取超出数组范围的索引。将其替换为 Alphabytes[b/8] = (Alphabytes[b/8] |......
.
似乎在发布模式下一切都可以编译,甚至没有检测到错误或警告等,所以这很奇怪,它只发生在调试模式下所以我想我可能会在 QT 错误跟踪中报告这个...... 除非有人能弄清楚为什么这个错误只在调试时发生...