从堆栈读取时出现分段错误

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设置为最新的分配,而不是全局根。

以上是关于从堆栈读取时出现分段错误的主要内容,如果未能解决你的问题,请参考以下文章

分段错误:在 C++ 中弹出向量时出现 11

访问填充了从管道读取的数据的结构时出现分段错误

从 scanf 读取 C 样式字符串时出现分段错误

弹出 x86 堆栈时出现分段错误

尝试锁定共享内存互斥体时出现分段错误

设置堆栈后在 C 中调用 printf 时出现分段错误