首页 > 解决方案 > C 中的堆栈,错误“进程返回 -1073741819 (0xC0000005)”

问题描述

#include <stdio.h>
#include <stdlib.h>
#define N 5

typedef struct stack{
    int top;
    int info[N];
} stack;

void initStack(stack *s);
void push(stack *s, int val);
void pop(stack *s);
int isFull(stack s);
int isEmpty(stack s);
void printStack(stack *s);

int main(){
    stack *s;
    initStack(&s);
    push(&s, 19);
    push(&s, 2);
    push(&s, 19);
    push(&s, 2);
    push(&s, 19);
    printStack(&s);

    return 0;
}

void initStack(stack *s){
    s->top = -1;
}

void push(stack *s, int val){
    if(isFull(*s) == 0){
        s->top++;
        s->info[s->top] = val;
    } else printf("Stack full!\n");
}

void pop(stack *s){
    if(isEmpty(*s) == 0) s->top--;
    else printf("Stack empty!\n");
}

int isFull(stack s){
    if(s.top == N-1) return 1;
    else return 0;
}

int isEmpty(stack s){
    if(s.top == -1) return 1;
    else return 0;
}

void printStack(stack *s){
    for(int i = 0; i < s->top + 1 && i < N; i++)
        printf("%d ", s->info[i]);
    printf("\n");
}

我对这段代码有问题......我想我正在从堆栈中写出来(绑定索引),即使从理论上讲,我应该有空闲位置。我得到了错误:

进程返回 -1073741819 (0xC0000005)

标签: cpointersstructstack

解决方案


您将堆栈指针的地址传递s给诸如 initStack 之类的堆栈函数(即传递给 initStack、push 等的类型是stack **)。s将inside main()(并且只有main(),而不是其他函数)的声明更改为stack s将解决您的麻烦。

如果您可以找到编译器的警告设置,请将其打开。他们会在发生此类类型不匹配问题时告诉您。


推荐阅读