意外的分段错误

时间:2015-04-15 19:23:22

标签: c++ segmentation-fault queue iostream cout

我编写了一个非常简单的程序,但是当我尝试编写队列大小(用STL创建)时,它崩溃了。我不知道为什么,请帮忙。

#include <queue>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    int n, i, x, cut = 0;
    queue<int> que;
    vector<int> vec;

    cin >> n;
    for (i = 1; i <= n; i++) {
        cin >> x;
        vec.push_back(x);
    }

    sort(vec.begin(), vec.end());
    for (i = 0; i < n; i++)
        que.push(vec[i]);

    while (!que.empty()) {
        cout << que.size() << '\n';
        cut += que.front();
        while (que.front() <= cut)
            que.pop();
    }
    return 0;
}

2 个答案:

答案 0 :(得分:2)

您收到错误,因为您在队列为空时调用front。 只需检查内循环中队列是否为空:

#include <queue>
#include <queue>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    int n, i, x, cut = 0;
    queue<int> que;
    vector<int> vec;

    cin >> n;
    for (i = 1; i <= n; i++) {
        cin >> x;
        vec.push_back(x);
    }

    sort(vec.begin(), vec.end());
    for (i = 0; i < n; i++)
        que.push(vec[i]);

    while (!que.empty()) {
        cout << que.size() << '\n';
        cut += que.front();
        while (!que.empty() && que.front() <= cut )
            que.pop();
    }
    return 0;
}

答案 1 :(得分:0)

您的代码实际上已崩溃:

while (que.front() <= cut)

因为你有一个循环可能对整个队列都是真的。下一行会弹出一个值。在某些时候,您的队列为空,que.front()将崩溃。