#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 :(得分:3)
您需要将堆栈初始化为NULL
int main()
{
STACK_NODE* myStackTop = NULL;
如果您没有,则在pop
最后一个元素时,您将使用未初始化的值。
顺便说一句:在pop
中,您似乎忘记了free(Ndel);