繁体   English   中英

uint32_t 中的缓冲区溢出错误是什么意思?

[英]What does buffer overrun error in uint32_t mean?

我正在尝试通过for循环将 ARGB 颜色数据写入uint32_t变量。 我收到一个错误:

对 m_imagedata[i][1] 的写入无效,可写范围为 0 到 0

if (!render){
    uint32_t* m_imagedata = nullptr;
}
else{
    m_imagedata = new uint32_t(m_viewportheight * m_viewportwidth);
}
        
for (uint32_t i = 0; i < m_viewportheight * m_viewportwidth; i++) {
    m_imagedata[i] = 0xff00ffff;

我怎样才能解决这个问题?

您有错误地动态分配数组的语法。 它应该是

m_imagedata = new uint32_t[m_viewportheight * m_viewportwidth];

然后你必须使用delete[]形式的delete来删除它,即

delete[] m_imagedata;

但是,正如其他人在评论中指出的那样,如果您想要的是一个可以在运行时动态调整大小的数组,您应该使用 C++ 标准库中包含的那个: std::vector<T> 这样,您不需要循环将每个项目初始化为某个值,并且您不必担心自己删除它。 如果您的m_imagedata成员变量是std::vector<uint32_t>您可以在 class 的构造函数中对其进行初始化,例如:

class my_image_class {
    //...
    std::vector<uint32_t> m_imagedata;
public:
    my_image_class(int wd, int hgt) :
        m_imagedata(wd * hgt, 0xff00ffff)
    {}
    //...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM