可能分段错误n> 150 000,具有矢量

时间:2015-11-14 12:28:16

标签: c++ vector segmentation-fault

int main()
{
    ios_base::sync_with_stdio(0);

    cin>>n;
    vector<vector<bool> > tab (n+1, vector<bool>(n+1));
    vector<unsigned short int >wifi (n+1);    
    int  z=0;
    x=1;
    do{    
        cin>>a>>b;
        tab[a][b]=1;
        tab[b][a]=1;
        x++;    
    }while(x!=n);
}

嗨,我仍有问题,即使将程序更改为矢量,程序也已停止大于150 000的工作结果。我简单地介绍了代码。

1 个答案:

答案 0 :(得分:0)

我的预感是你内存不足没有足够检查输入值!

更改[i]  到.at(i)并确保索引有效:

<强> Live On Coliru

#include <iostream>
#include <vector>

int main() {
    std::ios_base::sync_with_stdio(0);

    size_t n;
    if (std::cin >> n)
    {
        std::cout << "n = " << n << "\n";

        std::vector<std::vector<bool> > tab(n + 1, std::vector<bool>(n + 1));
        std::vector<unsigned short int> wifi(n + 1);

        std::cout << "allocated, reading\n";

        size_t a, b;
        for (size_t m = n; m && std::cin >> a >> b; --m)
        {
            tab.at(a%n).at(b%n) = 1;
            tab.at(b%n).at(a%n) = 1;
            if (m%1000==1) std::cout << "." << std::flush;
        }
    }
}

即使是250,000行,我的电脑也没有问题。

现在,请考虑使用dynamic_bitsetboost::icl::interval_set。考虑将parallell BGL用于分布式AdjacencyMatrix图。

如果矩阵稀疏,请考虑AdjacencyListsEdgeList