#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)語句。 我檢查瞭解決方案。但沒有任何工作。彈出堆棧的最後一個元素後,程序崩潰
BTW,在C有*不*需要轉換的malloc'的結果()'和朋友,也不是在推薦的*任何*的方式。 – alk