Это классическая ошибка, которую делают новички.
Давайте посмотрим на вашу основную функцию:
int main()
{
Pilha* Stack; // This line is your problem!
create_empty_stack(Stack);
}
Если вы помните указатели, объявление Pilha* Stack;
делает Stack указателем на память. Но сейчас это ни на что не указывает, потому что вы не зарезервировали память для объекта типа Pilha!
Ваша программа аварийно завершает работу, потому что create_empty_stack () пытается получить доступ к next , члену этого объекта (помните, что этот объект все еще не существует).
Итак, что вы должны делать вместо этого:
int main()
{
// Reserve space in memory for one Pilha object and
// make Stack point to this memory address.
Pilha* Stack = (Pilha*) malloc(sizeof(Pilha));
create_empty_stack(Stack);
}
Или гораздо более простой подход:
int main()
{
Pilha Stack; // Declare a new Pilha object
// and pass the memory address of this new object to create_empty_stack()
create_empty_stack(&Stack);
}