Получение ошибки при попытке использовать указатель со структурой - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь кодировать значения 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 голосов
/ 18 октября 2018

Вы создаете серию указателей на struct Color, но не инициализируете ни один из них, поэтому, поскольку они определены в области видимости файла, для них все установлено значение 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}, ...
0 голосов
/ 18 октября 2018

Вы объявляете указатель на структуру, но никогда не выделяете для нее память.Когда вы получаете доступ к его членам, вы разыменовываете нулевой указатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...