2017-06-11 72 views
1
#include<stdio.h> 
#include<stdlib.h> 
#include<stdbool.h> 
typedef struct node 
{ 
    char data; 
    struct node* link; 
} STACK_NODE; 

void insert(STACK_NODE** p); 
void print(STACK_NODE** p); 
bool push(STACK_NODE** p, char in); 
bool pop(STACK_NODE** p, char* out); 

int main() 
{ 
    STACK_NODE* myStackTop; 
    insert(&myStackTop); 
    print(&myStackTop); 
    return 0; 
} 

void insert(STACK_NODE** p) 
{ 
    char mychar; 
    int NC,k; 
    bool Mem; 
    printf("how many charachters do you want to put in stack:"); 
    scanf("%d",&NC); 
    for(k=0;k<NC;k++) 
    { 
     printf("enter character:-"); 
     scanf(" %c",&mychar); 

     Mem=push(p,mychar); 
     if(!Mem) 
     { 
      printf("ran out of memory or unknown error"); 
      exit(100); 
     } 
    } 
} 

bool push(STACK_NODE** p,char c) 
{ 
    STACK_NODE* newNode; 
    bool success; 
    newNode = (STACK_NODE*)malloc(sizeof(STACK_NODE)); 
    if(!newNode) 
    { 
     success = false; 
    } 
    else 
    { 
     newNode->data=c; 
     newNode->link=*p; 
     *p=newNode; 
     success = true; 
    } 
    return success; 
}  

void print(STACK_NODE** p) 
{ 
    char out; 
    printf("contents of the stack:"); 
    while(pop(p,&out)) 
    { 
     printf("%c",out); 
    } 
    return; 
} 

bool pop(STACK_NODE** p,char* c) 
{ 
    STACK_NODE* Ndel; 
    bool success; 
    if(*p) 
    { 
     success = true; 
     *c=(*p)->data; 
     Ndel= *p; 
     *p = (*p)->link; 
    } 
    else 
     success = false; 
    return success; 
} 

整個程序正常工作,直到最後一個元素從堆棧彈出並打印。該程序在最後一個字符被打印後崩潰。我試着在while塊之後的print()方法定義中放置額外的語句來調試它。我認爲問題是在pop()函數定義中的if(* p)語句。 我檢查瞭解決方案。但沒有任何工作。彈出堆棧的最後一個元素後,程序崩潰

+0

BTW,在C有*不*需要轉換的malloc'的結果()'和朋友,也不是在推薦的*任何*的方式。 – alk

回答

3

需要初始化你的籌碼爲NULL

int main() 
{ 
    STACK_NODE* myStackTop = NULL; 

如果你不這樣做,你就當你pop的最後一個元素使用未初始化值。

BTW:在pop看來你忘了​​

+0

謝謝..我工作.. –

+0

是的..我沒有忘記自由(Ndel)。 –

相關問題