簡體   English   中英

嘗試將指針與struct結合使用時出現錯誤

[英]Getting error when trying to use pointer with struct

我正在嘗試將RGB值編碼到一個結構中,並且工作正常,但是當我嘗試運行訪問該結構的函數時,出現一個異常,說我的結構為nullptr。 這是代碼:

struct Color {
    unsigned char R;
    unsigned char G;
    unsigned char B;
}*blue, *red, *green, *yellow, *purple, *pink, *brown;

void CreateColors()
{
    blue->R = 0;
    blue->G = 0;
    blue->B = 255;

    red->R = 255;
    red->G = 0;
    red->B = 0;

    green->R = 0;
    green->G = 255;
    green->B = 0;

    yellow->R = 255;
    yellow->G = 255;
    yellow->B = 0;

    purple->R = 133;
    purple->G = 87;
    purple->B = 168;

    pink->R = 255;
    pink->G = 0;
    pink->B = 191;

    brown->R = 168;
    brown->G = 130;
    brown->B = 87;

}

如果你們能告訴我我做錯了什么,或者使用更好的數據結構將是很好的。 我正在使用cpp類,並試圖巧妙地開始使用指針來預熱它們。 再次感謝。

另外,當我嘗試使用這些值時,如下所示:

if (deg >= 0 && deg < boundaries[COAL_B])
{
    pixels[i][j][0] = blue->R;
    pixels[i][j][1] = blue->G;
    pixels[i][j][2] = blue->B;
}

它引發相同的錯誤。

您正在創建一系列指向struct Color的指針,但沒有初始化它們中的任何一個,因此,由於它們是在文件范圍內定義的,因此它們都設置為NULL。 然后,您嘗試取消引用那些NULL指針。 這會調用未定義的行為

您應該改為定義這些結構的實例而不是指針:

struct Color {
    unsigned char R;
    unsigned char G;
    unsigned char B;
} blue, red, green, yellow, purple, pink, brown;

然后將它們作為實例進行訪問:

void CreateColors()
{
    blue.R = 0;
    blue.G = 0;
    blue.B = 255;

    red.R = 255;
    red.G = 0;
    red.B = 0;

    ...

更好的是,擺脫初始化函數,並在定義它們時對其進行初始化:

struct Color {
    unsigned char R;
    unsigned char G;
    unsigned char B;
};

struct Color blue = { 0, 0, 255}, red = { 255, 0, 0 }, green = { 0, 255, 0}, ...

您聲明一個指向結構的指針,但從不為其分配內存。 當訪問它的成員時,您將取消引用空指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM