int main()
{
Stack *top;
top->next = NULL;
Если бы это был необработанный C, вы бы записали NULL
в мусорное хранилище - переменная top
не была инициализирована, поэтому она указывает на мусор.->next
будет следовать вашему указателю мусора и затем записывать в него со смещением в 4 или 8 байтов.Все еще мусор.
Может быть, C ++ делает магическую struct
== class
магическую инициализацию для вас - я недостаточно хорошо знаю C ++, чтобы комментировать, - но вы, вероятно, все еще смотрите на мусор.
Добавление test = ""
меняет структуру памяти настолько, что вы перезаписываете то, что находится в адресном пространстве вашего процесса.Это все еще мусор, так что кто знает, что вы сломали :), но он не сразу вылетел.
Инициализируйте вашу переменную top
чем-то:
Stack *top;
top = malloc(sizeof Stack);
if (!top) {
/* die */
}