尝试将指针与struct结合使用时出现错误

时间:2018-10-18 16:26:48

标签: c++ c pointers 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;
}

它会引发相同的错误。

2 个答案:

答案 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)

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