Структуры, нарушение прав доступа при записи по адресу

Всегда было удобнее разбирать по примеру, поэтому: Есть часть кода, которая не работает:

typedef struct
{
    int pr;
    int dat;
}Node;

Node* arr[5];

void foo(int pr, int dat)
{
    arr[1] -> dat = dat;     //интересная
    arr[1] -> pr = pr;       //часть
}

а вот в таком виде уже работает:

 typedef struct
    {
        int pr;
        int dat;
    }Node;

    Node* arr[5];

    void foo(int pr, int dat)
    {
    Node* node = (Node*) malloc(sizeof(Node));  //та 
    node->pr = pr;                              //самая 
    node->dat = dat;                            //интересная 
    arr[1] = node;                              //часть
    }

ну понятно, функцию foo вызываю из main-а, передаю два каких-то int-овых значения. Так зачем создавать этот node, его же потом очистить надо (free)? Почему нельзя сразу положить в массив? Заранее спасибо, когда разберусь, 100% буду очень рад и благодарен)!


Ответы (1 шт):

Автор решения: AlexGlebe

Не делайте массив нулевых указателей, а создайте массив структур.

Node arr[5]; // ! НЕ указатели

void foo(int pr, int dat)
{
    arr[1] . dat = dat;     //интересная
    arr[1] . pr = pr;       //часть
}
→ Ссылка