2 Stimmen

Problem beim Versuch, einen Stapel in c zu leeren

(wahrscheinlich ist es eine dumme Sache, aber) Ich habe ein Problem mit einer Stack-Implementierung in C-Sprache, wenn ich versuche, es zu leeren, die Funktion zum Leeren des Stapels macht eine Endlosschleife die Spitze des Stapels ist nie Null. wo ich einen Fehler begehen? danke bye!

#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;
}

4voto

nos Punkte 214143

Sie sind free() das gleiche temp Variable jedes Mal in der Schleife, also wer weiß, was passieren wird, müssen Sie auch temp aktualisieren, nachdem Sie geändert haben top also aktualisieren temp innerhalb Ihrer Schleife, z.B. so:

void freeStack(ptr *top){

  while(*top!=NULL){
       ptr temp = *top;
      *top = temp->next;
      free(temp);
   }
  }

3voto

Naveen Punkte 71443

Sie werden nicht inkrementiert temp Zeiger. Sie vermissen temp = temp->next

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X