c++ - 写访问冲突异常
问题描述
我正在制作这个程序,您必须在 main 中使用 switch 语句来修改堆栈,而 push 语句有一点问题。在我输入要放入堆栈的值后,程序暂停并显示此错误:
Exception thrown: write access violation.
**this** was 0x1AD0112. occurred
错误指向我的 cpp 文件,用于 push() 下的方法。
#include "Stack.h"
void Stack::push(int val) {
top = top + 1;
ary[top] = val; //this is where the exception is thrown.
//ary[top++] = val;
}
int Stack::pop() {
top = top - 1;
return ary[top + 1];
//return ary[top--];
}
int Stack::peek() const {
return ary[top];
}
bool Stack::isFull() const {
if (top == SIZE - 1)
return true;
else
return false;
//return top == SIZE - 1;
}
bool Stack::isEmpty() const {
if (top == -1)
return true;
else
return false;
//return top == -1;
}
Stack::Stack() {
top = -1;
}
然后我调用 main 中的方法将值放在堆栈的顶部。
#include "Stack.h"
#include <iostream>
using namespace std;
int main() {
Stack s;
int x;
int y;
char c;
cin >> c;
do {
switch (c) {
case 'P': //push statement
cin >> x;
s.push(x);
break;
//case 'O':
//y = s.pop();
//cout << y << endl;
//break;
case 'K':
y = s.peek();
cout << y << endl;
break;
case 'Q':
return 0;
break;
}
} while (c != 'Q');
return 0;
}
这里也是头文件
#ifndef STACK_H
#define STACK_H
class Stack {
private:
int top;
static const int SIZE = 10;
int ary[SIZE];
public:
int pop();
void push(int);
int peek() const;
bool isEmpty() const;
bool isFull() const;
Stack();
};
#endif
输入第一个推送值后发生错误。任何帮助表示赞赏!谢谢
解决方案
由于您可以更改 switch case 语句中使用的 'c' 值的唯一位置是在“do while 循环”之前,因此您最终会在循环中卡住您所做的选择。如果您选择“P”,您稍后键入的所有值都是您想要推送到堆栈的值(因为您被 c = 'P' 卡住了) 将 cin >> c 行移到“do”部分之前“切换”声明。这将使程序的行为更像您计划的那样。
推荐阅读
- java - 打印带有敏感数据的 HTTPClient 请求参数
- node.js - 监听其他应用程序中发生的事件
- java - Rabbitmq 连接被拒绝,在 linux 服务器上的 docker 容器内运行
- python - Python 函数从另一个函数调用变量。但为什么?
- javascript - 使用现有数组中的匹配键拆分对象
- sql - 带case语句的listagg的正确形式
- git - mac 似乎不是 git 存储库错过了一个斜线
- mongodb - 即使在 mongoDB 中没有使用,如何显示所有可用的数据库列表?
- jenkins - 节点工具位置无法在 Jenkins 中正确保存
- postgresql - 错误 setval:值 0 超出序列“seq”的范围 (1..9223372036854775807)