我的 For 循环出现分段错误
I am getting a Segmentation Fault with my For loops
我的代码中不断收到分段错误错误
页眉
#ifndef DUALSTK
#define DUALSTK
#include <deque>
using namespace std;
enum stackNumber {One, Two};
template <typename T>
class dualStack {
public:
// constructor. set counts to 0
dualStack() : dualStackElements(20, 0) {}
void push(const T& item, stackNumber n);
void pop(stackNumber n);
T& top(stackNumber n);
//const T& top(stackNumber n) const;
bool empty(stackNumber n) const;
int size(stackNumber n) const;
int getCount1() const {return count1;}
int getCount2() const {return count2;}
private:
deque<T> dualStackElements;
int count1, count2;
};
#endif // DUALSTK
主.cpp
#include <iostream>
#include <deque>
#include "dualstk.h"
using namespace std;
template <typename T>
T& dualStack<T>::top(stackNumber n) {
int num = 0;
if (n == 0) {
num = count1 - 1;
return num;
}
if (n == 1) {
num = 20 - count2;
return num;
}
}
template <typename T>
void dualStack<T>::push(const T& item, stackNumber n) {
if (n == 0) {
count1++;
dualStackElements[top(One)] = item;
}
if (n == 1) {
count2++;
dualStackElements[top(Two)] = item;
}
}
template <typename T>
void dualStack<T>::pop(stackNumber n) {
int item = 0;
int item2 = 0;
if (n == 0) {
item = dualStackElements[top(One)];
cout << item << " ";
count1--;
}
if (n == 1) {
item2 = dualStackElements[top(Two)];
cout << item2 << " ";
count2--;
}
}
template <typename T>
bool dualStack<T>::empty(stackNumber n) const {
return 1;
}
int main() {
dualStack<int> stack;
for(int i = 1; i < 21; i++) {
if(i % 2 == 0) {
stack.push(i, One);
}
else {
cout << i;
stack.push(i, Two);
}
}
cout << endl;
for (int j = 0; j < 10; j++)
stack.pop(One);
cout << endl;
for (int i = 0; i < 10; i++)
stack.pop(Two);
cout << endl;
cout << stack.getCount2();
cout << stack.getCount1();
cout << endl;
cout << "n" << stack.top(One);
cout << stack.top(Two) << endl;
return 0;
}
每当我的 stack.pop 有一个循环时,它就会正常工作但是如果我在使用一个 for 循环来做 stack.pop 之后立即执行 for 循环,它将不起作用
我不确定我做错了什么
for (int j = 0; j < 10; j++)
stack.pop(One);
for (int i = 0; i < 10; i++)
stack.pop(Two);
函数 top() 返回对局部变量 'num' 的引用。它的存储位于堆栈上,因此当函数返回时,该值将被修改,然后您将其用作 dualStackElements 的索引。这可能会导致访问无效的内存地址。
我认为您误解了它的作用(或者我误解了您的代码):
dualStackElements[top(One)] = item;
您尚未声明双堆栈元素数组
最好改为声明两个取消排队。
deque<T> dualStackElementsOne;
deque<T> dualStackElementsTwo;
您的Top
方法需要进行一些错误检查。如果count1
为 0(或count2
> 20)怎么办?您将返回一个负值,然后将其用作 deque 的索引。并通过引用删除退货!
-
top() 方法返回对局部变量 num 的引用,该变量在方法调用后被释放。但是不同的操作系统对访问非法内存有不同的限制,有时,在 Linux 中是可以的。
-
在构造函数中,没有字段的初始化操作:count1,count2。如果我在修改后的构造函数中注释掉"count1=count2=0;",程序总是返回"分段错误"。
-
为了获得程序的稳定结果,您应该在制作之前进行清理。我不知道确切的原因,但它确实发生在我的测试运行中。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?