2017-06-11 12 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

を忘れてしまったようで、Cで*ありなし*(malloc関数 'の結果をキャストする必要があります)'&フレンズ、またそれは、*は任意の*の方法をお勧めします。 – alk

答えて

3

あなたはときpop最後の要素あなたは、あなたが初期化されていない値を使用しますしない場合は

int main() 
{ 
    STACK_NODE* myStackTop = NULL; 

をNULLにあなたのスタックを初期化する必要があります。ところで

popでは、それはあなたがところで​​

+0

ありがとうございました.. –

+0

はい..iは無料(Ndel)を忘れました。 –

関連する問題