尝试将指针与结构一起使用时出错

Getting error when trying to use pointer with struct

本文关键字:出错 一起 结构 指针      更新时间:2023-10-16

我正在尝试将 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;
}

如果你们能告诉我我做错了什么,或者使用更好的数据结构,那就太好了。我正在TA'ing一个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}, ...

声明指向结构的指针,但从不为其分配内存。 当您访问其成员时,您将取消引用空指针。