从堆栈读取时出现分段错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从堆栈读取时出现分段错误相关的知识,希望对你有一定的参考价值。
这是我第一次创建堆栈。我很清楚我必须做什么,但是由于代码无法正常工作而感到沮丧。
它运行良好,直到我尝试从根目录检索任何数据,这立即导致段错误。
这是我的程序:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stackNode
char letter;
struct stackNode * next;
;
int size=0;
int capacity=10;
struct stackNode * root=NULL;
void push(char data, struct stackNode * root)
if(size==capacity)
printf("Error: Stack Overflow\n");
return;
struct stackNode * new=(struct stackNode *)malloc(sizeof(struct stackNode *));
new->letter=data;
new->next=root;
printf("%c,%u", new->letter, new->next);
root=new;
printf("%c,%u", new->letter, new->next);
size++;
char pop(struct stackNode ** root)
if(size==0)
printf("Error: Stack is Empty\n");
return '\0';
printf("\npop*\n");
char temp;
printf("\n*\n");
struct stackNode * tempad;
printf("\n*\n");
temp=(*root)->letter;
printf("\n*\n");
tempad=*root;
printf("\n*\n");
*root=(*root)->next;
printf("\n*\n");
free(tempad);
printf("\n*\n");
size--;
return temp;
int main()
push('c', root);
push('v', root);
push('n', root);
printf("%c %c %c", pop(&root), pop(&root), pop(&root));
这是输出:
pop*
*
*
Segmentation fault
有人可以指出错误吗?快速响应(我将在30分钟内完成测试!)
答案
主要问题是不必要的全局变量的使用,这似乎引起了混乱。在push
中,该参数的类型为struct stackNode *
,但正在像引用全局root
一样对其进行操作。但是root = new
纯粹是本地的,对全局root
没有影响。但是,size++
does
另一答案
这确实是令人困惑的代码(即,与局部作用域中的变量同名的全局变量)。我只是要重写它,未经测试并且可以在移动设备上使用,但应该没问题。您可以进行比较以查看问题。一方面,尽管您将局部变量root设置为最新的分配,而不是全局根。
以上是关于从堆栈读取时出现分段错误的主要内容,如果未能解决你的问题,请参考以下文章