проблема при попытке очистить стек в c - PullRequest
2 голосов
/ 12 мая 2010

(возможно, это глупо, но) у меня проблема с реализацией стека на языке C, когда я пытаюсь очистить его, функция для очистки стека выполняет бесконечный цикл. вершина стека никогда не равна нулю. где я совершаю ошибку? спасибо пока!

#include <stdio.h>
#include <stdlib.h>

typedef struct stack{
  size_t a;
  struct stack *next;
} stackPos;

typedef stackPos *ptr;

void push(ptr *top, size_t a){
    ptr temp;
    temp = malloc(sizeof(stackPos));
    temp->a = a;
    temp->next = *top;
    *top = temp;
}

void freeStack(ptr *top){
    ptr temp = *top;
    while(*top!=NULL){
        //the program does an infinite loop
        *top = temp->next;
        free(temp);
    }
}

int main(){
    ptr top = NULL;
    push(&top, 4);
    push(&top, 8);
    //down here the problem
    freeStack(&top);
    return 0;
}

Ответы [ 2 ]

4 голосов
/ 12 мая 2010

Вы free() используете одну и ту же переменную temp каждый раз в цикле, поэтому, кто знает, что произойдет, вам также необходимо обновить temp после изменения top, поэтому обновите temp внутри вашей петли, например вот так:

void freeStack(ptr *top){

  while(*top!=NULL){
       ptr temp = *top;
      *top = temp->next;
      free(temp);
   }
  }
3 голосов
/ 12 мая 2010

Вы не увеличиваете указатель temp. Вы пропали без вести temp = temp->next

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...