Невозможно инициализировать размер стека до 0

#c #segmentation-fault #stack

#c #ошибка сегментации #стек

Вопрос:

Я немного устал от использования стеков, поэтому здесь может быть что-то явно неправильное. Я либо получаю ошибку segfault при попытке установить размер моего стека равным 0, либо получаю ошибку segfault в моей функции push при выполнении первого оператора if. Приведенный ниже код приведет к сбою в первой строке функции push.

 typedef strcut Stack{
    Node data[UNIT_MAX];
    int size;
 } Stack;

//
Stack* DFS(Node* G, int numbVertices, Node v){
    //...More code above
    Stack* S = NULL;

    //Segfaulting when I try to set S->size = 0!!!

    push(S,v);


}

//
void push(Stack* S, Node d){
    if(S->size < UNIT_MAX){
        S->data[S->size  ] = d;
    }
    else
        exit(STACK_FULL);
}
  

Комментарии:

1. Вы не можете использовать -> для нулевого указателя

Ответ №1:

 Stack* S = NULL;

//Segfaulting when I try to set S->size = 0!!!
  

Конечно, сбой вашей программы из-за того, что вы установили S, равен NULL.

(Stack*)(NULL)-> size = 0. Это обязательно приведет к сбою, потому что вы обращаетесь к нулевому адресу.