2010-05-12 7 views
2

(probablement c'est une chose stupide mais) j'ai un problème avec une mise en œuvre de la pile en langage C, quand je tente de le vider, la fonction pour vider la pile fait une boucle infinie .. le sommet de la pile n'est jamais nul. où je commets une erreur? Merci salut!problème lorsque vous essayez de vider une pile dans 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; 
} 
+0

ohh oui merci c'était une chose voir vraiment stupide, mais je ne l'ai pas vraiment merci: D – frx08

Répondre

4

Vous êtes free() ing la même temp variables à chaque fois dans la boucle, alors qui sait ce qui va arriver, vous devez également mettre à jour après température que vous avez changé top, afin de mettre à jour temp dans votre boucle par exemple comme ceci:

void freeStack(ptr *top){ 

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

Vous n'augmentez pas le pointeur temp. Il vous manque temp = temp->next

Questions connexes