【发布时间】:2018-03-02 05:17:04
【问题描述】:
我试图理解这个编程问题,我应该猜测数据结构。我的程序有一点小问题。
问题:我不知道为什么我的程序总是被信号 11(分段错误)杀死,但它可以正常工作并编译。
关于程序:n 是整数集的数量;它接收一个整数 p(命令)和整数数据,并将其推入/弹出以下数据结构。我使用 bool 作为标志来检查状态。我是否相信结构会在 while 循环超出范围后被破坏?
int main(){
int n;
while (cin >> n && n != 0){
stack<int> mystack;
queue<int> myqueue;
priority_queue<int> maxq;
bool isstack = true;
bool isqueue = true;
bool ispq = true;
for (int i = 0; i < n; i++){
int p, data;
cin >> p >> data;
if (p == 1){
if (isqueue) myqueue.push(data);
if (isstack) mystack.push(data);
if (ispq) maxq.push(data);
} else if (p == 2){
if ((mystack.empty() || mystack.top() != data) && isstack) isstack = false;
else mystack.pop();
if ((myqueue.empty() || myqueue.front() != data) && isqueue) isqueue = false;
else myqueue.pop();
if ((maxq.empty() || maxq.top() != data) && ispq) ispq = false;
else maxq.pop();
}
}
if (isstack && !(isqueue || ispq)) cout << "stack" << endl;
else if (isqueue && !(isstack || ispq)) cout << "queue" << endl;
else if (isstack && (ispq || isqueue) || (isqueue && ispq)) cout << "not sure" << endl;
else if (ispq && !(isstack || isqueue)) cout << "priority queue" << endl;
else cout << "impossible" << endl;
}
return 0;
}
【问题讨论】:
-
在调试器中运行它。它应该在段错误处停止。
-
你需要设置 LD_LIBRARY_PATH 让 Valgrind 知道你的库在哪里,这样 valgrind 才能给出完整的堆栈跟踪。
标签: c++11 data-structures segmentation-fault abstract-data-type