Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11 涉及已卸载共享对象的内存泄漏?_C++11_Data Structures_Segmentation Fault_Abstract Data Type - Fatal编程技术网

C++11 涉及已卸载共享对象的内存泄漏?

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

我试图理解这个编程问题,我应该猜测数据结构。我的程序有点问题

问题:我不知道为什么我的程序总是被信号11(分段错误)杀死,但它工作正常,编译良好

关于程序:n是整数集的个数;它接收整数p(命令)和整数数据,并将/pops推送到以下数据结构中。我使用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;
}
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后没有弹出。如果不是,你认为这是一个条件吗漏掉一行