c - 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)
解决方案
您将堆栈指针的地址传递s
给诸如 initStack 之类的堆栈函数(即传递给 initStack、push 等的类型是stack **
)。s
将inside main()
(并且只有main()
,而不是其他函数)的声明更改为stack s
将解决您的麻烦。
如果您可以找到编译器的警告设置,请将其打开。他们会在发生此类类型不匹配问题时告诉您。
推荐阅读
- python - 如何将值存储在函数中并从另一个函数中打印/修改?
- python - 如何显示指定目录中的文件列表
- hibernate - Hibernate 一对多冗余更新语句
- javascript - 如何使用 Javascript 或 jQuery 对每个单选值进行求和和相减
- r - 从 R 矩阵中的多列中提取值作为数字并绘制直方图
- node.js - 使用赛普拉斯,我将如何编写一个简单的测试来检查页面上是否存在徽标图像
- matlab - 让 Matlab 搜索键/值对的文本文件并替换值
- html - 可以使用 CSS Flexbox 来拉伸每一行的元素,同时保持一致的宽度吗?
- arrays - 如何初始化大多数值相同但某些值不同的静态数组?
- android - Firebase 数据库。检索嵌套数据