我正在尝试将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;
}
它会引发相同的错误。
答案 0 :(得分:5)
您正在创建一系列指向struct Color
的指针,但是您没有初始化它们中的任何一个,因此,由于它们是在文件范围内定义的,因此它们都被设置为NULL。然后,您尝试取消引用那些NULL指针。这将调用undefined behavior。
您应该改为定义这些结构的实例而不是指针:
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}, ...
答案 1 :(得分:0)
您声明了一个指向结构的指针,但从不为其分配内存。当您访问它的成员时,您将取消引用空指针。