C++11 涉及已卸载共享对象的内存泄漏?
我试图理解这个编程问题,我应该猜测数据结构。我的程序有点问题 问题:我不知道为什么我的程序总是被信号11(分段错误)杀死,但它工作正常,编译良好 关于程序:n是整数集的个数;它接收整数p(命令)和整数数据,并将/pops推送到以下数据结构中。我使用bool作为标志来检查状态。当while循环超出范围时,我相信这些结构会被破坏,对吗C++11 涉及已卸载共享对象的内存泄漏?,c++11,data-structures,segmentation-fault,abstract-data-type,C++11,Data Structures,Segmentation Fault,Abstract Data Type,我试图理解这个编程问题,我应该猜测数据结构。我的程序有点问题 问题:我不知道为什么我的程序总是被信号11(分段错误)杀死,但它工作正常,编译良好 关于程序:n是整数集的个数;它接收整数p(命令)和整数数据,并将/pops推送到以下数据结构中。我使用bool作为标志来检查状态。当while循环超出范围时,我相信这些结构会被破坏,对吗 int main(){ int n; while (cin >> n && n != 0){ stac
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;
}
intmain(){
int n;
而(cin>>n&&n!=0){
堆叠mystack;
队列myqueue;
优先级队列maxq;
bool-isstack=true;
bool isqueue=true;
bool ispq=真;
对于(int i=0;i>p>>数据;
如果(p==1){
if(isqueue)myqueue.push(数据);
if(isstack)mystack.push(数据);
if(ispq)maxq.push(数据);
}else如果(p==2){
if((mystack.empty()| | mystack.top()!=数据)和&isstack)isstack=false;
else mystack.pop();
如果((myqueue.empty()| | myqueue.front()!=data)&&isqueue)isqueue=false;
else myqueue.pop();
如果((maxq.empty()| | maxq.top()!=数据)&&ispq)ispq=false;
else maxq.pop();
}
}
如果(isstack&!(isqueue | | ispq))不能Yes,那么您使用的数据结构是while的局部范围,因此它们在while循环结束时被破坏
除非您提供了您看到的分段错误的输入,否则很难说。或者在调试模式下运行它,您的程序应该在发生分段错误的行中断。我尝试运行此代码
此代码在“isstack”更改为false后弹出时引发异常
例外情况是“Expression:deque-empty-before-pop”
变量更改为false后,always条件语句返回false
所以你试图在空的堆栈中弹出
这只是一个逻辑错误。在调试器中运行它。它应该在segfault点停止。你需要设置LD_LIBRARY_PATH,让Valgrind知道你的库在哪里,这样Valgrind就可以给出完整的堆栈跟踪。这不符合回答条件。我将“isstack”更改为false后没有弹出。如果不是,你认为这是一个条件吗漏掉一行