簡體   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