【问题标题】:whats wrong in my code? why the error msg我的代码有什么问题?为什么错误信息
【发布时间】:2016-04-18 18:53:42
【问题描述】:

以下代码运行良好,如果我在运行后忽略错误消息,我可以获得我想要的结果。我得到的错误是:调试错误! 程序:c:\qt\qt5.5.1\5.5\msvc2013_64\bin\Qt5Cored.dll 模块:5.5.1 文件:global\qglobal.cpp 线路:2966 .....

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

这是控制台中的错误: 断言:文件 c:\work\build\qt5_workdir\w\s\qtbase\sr 中的“uint(i)

这是正确的输出:

位是: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]);

【问题讨论】:

  • 我不确定,但我认为您应该使用 reinterpret_cast 而不是 static_cast

标签: c++ qt qbytearray


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    似乎在发布模式下,一切都可以编译,甚至没有检测到错误或警告等,所以这很奇怪,它只发生在调试模式下,所以我认为在 QT 错误跟踪中可能会报告这个问题...... 除非有人能弄清楚为什么只有在调试时才会出现这个错误......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      相关资源
      最近更新 更多