gpt4 book ai didi

qt - 尝试删除Qimage Format_RGB888时Qt应用程序崩溃

转载 作者:行者123 更新时间:2023-12-02 07:29:21 27 4
gpt4 key购买 nike

我收到“检测到堆损坏:在正常块之后……CRT检测到应用程序在堆缓冲区结束后写入了内存”。当变量test被销毁时。
如果更改图像大小,则不会发生崩溃,我认为它与内存对齐有关,但我无法弄清楚是什么。
我正在使用MSVC 2017 64位的官方Qt版本

#include <QCoreApplication>
#include <QImage>

QImage foo(int width, int height)
{
QImage retVal(width, height, QImage::Format_RGB888);
for (int i = 0; i < height; ++i) // read each line of the image
{
QRgb *lineBuf = reinterpret_cast<QRgb *>(retVal.scanLine(i));
for (int j = 0; j < width; ++j)
{
lineBuf[j] = qRgb(0,0,0);
}
}
return retVal;
}

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
{
QImage test = foo(5,5);
}
return a.exec();
}

最佳答案

正如GM在上述评论中所建议的那样,问题在于QRgb是32位结构。
我已经更改了用自定义RGB结构替换QRgb的代码

struct RGB {
uint8_t r;
uint8_t g;
uint8_t b;
};

QImage foo(int width, int height)
{
QImage retVal(width, height, QImage::Format_RGB888);
for (int i = 0; i < height; ++i) // read each line of the image
{
RGB *lineBuf = reinterpret_cast<RGB *>(retVal.scanLine(i));
for (int j = 0; j < width; ++j)
{
RGB tmp;
//.... do stuff with tmp
lineBuf[j] = tmp;
}
}
return retVal;
}

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
{
QImage test = foo(5,5);
}
return a.exec();
}

关于qt - 尝试删除Qimage Format_RGB888时Qt应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63112846/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com