0
void change_degree(vector<int> &nodes, map<int, vector<int> > &edges, int vertex){
    map<int, vector<int> >::iterator ite;
    ite = edges.find(vertex);
    vector<int> temp = (*ite).second;
    vector<int>::iterator it;
    for(it = temp.begin(); it != temp.end(); it++){
        cout << *it;
        if(nodes[*it + 1] > 1)
            nodes[*it + 1]++;
    }
}  

この関数はエラーを生成しています

*** glibc detected *** ./a.out: munmap_chunk(): invalid pointer: 0x09c930e0 ***  

なぜそれが来るのか、そしてそれが何を意味するのか誰かに教えてもらえますか?前もって感謝します。

4

1 に答える 1

3

vertexさて、私が見る1つの問題は、実際にで見つかったかどうかを確認していないことですedges。所有していないメモリを間接参照している可能性があります。

void change_degree(vector<int> &nodes, map<int, vector<int> > &edges, int vertex){
    map<int, vector<int> >::iterator ite = edges.find(vertex);
    if (ite != edges.end()) {  // <-- this is what you're missing
        vector<int> temp = (*ite).second;  // <-- this is probably where you're dying
        vector<int>::iterator it;
        for(it = temp.begin(); it != temp.end(); it++){
            cout << *it;
            if(nodes[*it + 1] > 1)  // <-- you could also be crashing here
                nodes[*it + 1]++;
        }
    }
}

次回は、GDBを介してアプリを実行し、スタックトレースを確認してください。

nodes編集:別の可能性は、誤ってインデックスを作成していることです。nodes[*it + 1]それが有効であることを確認してください。

于 2012-10-31T01:34:26.050 に答える