[英]C++ - struct constructor, redefinition error when trying to derefence a pointer to the 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.