【问题标题】:Heap block modified past requested size堆块已修改超过请求的大小
【发布时间】:2012-06-22 14:52:19
【问题描述】:

更新:错误似乎是由这一行产生的:*line = color;

我收到以下错误,但我不明白它可能来自哪里:

错误:

堆[testQt.exe]: 0B444FE8 处的堆块在 0B44C6B0 处修改,超过了请求的 76c0 大小

生成它的行:

return QPixmap::fromImage(qimage);

发件人:

QPixmap Interpolation::getData() {
    QPointF pt(0, 0);
    QRgb color;
    QImage qimage(m_width, m_height, QImage::Format_ARGB32);
    qimage.fill(Qt::transparent);

    for (int i(0); i < m_height; ++i) {
        m_progress->setValue(m_width+i);
        QRgb *line = (QRgb *)qimage.scanLine(i);
        for (int j(0); j < m_width; ++j) {
            pt.setX(j);
            pt.setY(i);
            line += 1;
            if (isInHull(pt)) {
                color = colorScale(interp(&pt));
                *line = color; //If I remove this part the program won't crash
            }
        }
    }  
    return QPixmap::fromImage(qimage);
}

如果有帮助:

QRgb Interpolation::colorScale(qreal value)
{
    int cat;
    cat = qFloor(qreal(9)*(value-m_min)/(m_max-m_min));

    return m_couleurs[cat];
}

与:

m_couleurs[0] = qRgb(247, 252, 240);
m_couleurs[1] = qRgb(224, 243, 219);
m_couleurs[2] = qRgb(204, 235, 197);
m_couleurs[3] = qRgb(168, 221, 181);
m_couleurs[4] = qRgb(123, 204, 196);
m_couleurs[5] = qRgb(78, 179, 211);
m_couleurs[6] = qRgb(43, 140, 190);
m_couleurs[7] = qRgb(8, 104, 172);
m_couleurs[8] = qRgb(8, 64, 129);

任何线索将不胜感激。

编辑:添加完整功能以防万一。 Edit2:使代码更清晰,并删除了无用的部分。 Edit3:更新了问题。

【问题讨论】:

  • 什么都没有,但是您可以采取一些措施来缩小范围。如果您注释掉整个第二个循环,是否会发生错误? (以for (int i(0); i &lt; m_height; ++i) 开头并以匹配的} 结尾?如果错误消失,那么这可能就是问题所在。
  • @Evanteran 如果我删除这部分,问题似乎会消失。我要更新我的第一篇文章。
  • 这种演员阵容合法吗? QRgb *line = (QRgb *)qimage.scanLine(i); qt-project.org/doc/qt-4.8/qimage.html#scanLinescanLine 返回一个无符号字符,您将其转换为无符号整数 doc.qt.nokia.com/4.7-snapshot/qcolor.html#QRgb-typedef

标签: c++ qt memory qt4 heap-memory


【解决方案1】:

在将颜色分配给 *line 之前先推进行。因此,当 j = 0 时,您实际上是在设置像素 1,在您写入缓冲区末尾之后的最后一个扫描行的最后一个像素的末尾。

将行 += 1 移动到循环的末尾。

【讨论】:

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