Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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_Memory_Qt4_Heap - Fatal编程技术网

C++ 修改的堆块超过了请求的大小

C++ 修改的堆块超过了请求的大小,c++,qt,memory,qt4,heap,C++,Qt,Memory,Qt4,Heap,更新:错误似乎是由此行生成的:*line=color 我得到以下错误,但我不明白它来自何处: 错误: 堆[testQt.exe]: 0B444FE8处的堆块在0B44C6B0处修改,超过请求的76c0大小 生成它的行: return QPixmap::fromImage(qimage); 发件人: QPixmap Interpolation::getData() { QPointF pt(0, 0); QRgb color; QImage qimage(m_width,

更新:错误似乎是由此行生成的:*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);
}
与:

任何线索都将不胜感激

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

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


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

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


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

没有跳出任何内容,但是可以做一些事情来缩小范围。如果注释掉整个第二个循环,是否会发生错误?(从(int i(0);i开始,以匹配的
}
结束?如果错误消失了,那么这可能就是问题所在。@Evanteran如果我删除这个部分,问题似乎就消失了。我将更新我的第一篇帖子。这个角色合法吗?QRgb*line=(QRgb*)qimage.scanLine(i);扫描线返回一个无符号字符,并将其转换为一个无符号整数。不会跳出任何内容,但可以做一些事情来缩小范围。如果注释掉整个第二个循环,是否会发生错误?(从(
for)(int i(0);i
并以匹配的
}
结尾?如果错误消失,那么问题可能就在这里。@Evanteran如果我删除此部分,问题似乎就消失了。我将更新我的第一篇文章。这是否合法?QRgb*line=(QRgb*)qimage.scanLine(I);扫描线返回无符号字符,并将其强制转换为无符号整数
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);