Структуры, нарушение прав доступа при записи по адресу
Всегда было удобнее разбирать по примеру, поэтому: Есть часть кода, которая не работает:
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; //часть
}