0

ここでの最初の質問なので、私の投稿で見つけた正式な間違いについてお詫び申し上げます。

ベクトルに基づく隣接リストを使用する必要がある「無向連結加重グラフ」の単純なクラスをコーディングしています。

問題は、Eclipse からプログラムを実行すると、MS Windows が「動作を停止する」と表示し、デバッグ後に「0x00AE251A でハンドルされていない例外 .... アクセス違反の書き込み場所...」というメッセージが表示されることです。調べてみると、この問題は、ポインターの破棄またはポインターの初期化の欠落が原因である可能性があることがわかりました (?)。この問題をトラブルシューティングするために、標準のポインターから shared_ptr に切り替えましたが、エラーは同じです...

誰でもこれについて教えてもらえますか?原因を突き止めようとしてほぼ一日を無駄にしましたが、成功しませんでした。

class UndirectedGraph
{
private:
    int V;                                  
    std::vector<std::shared_ptr<std::pair<int,int>>>* adj;    
public:
    UndirectedGraph(int V)
{
        this->V = V;
        this->adj = new std::vector<std::shared_ptr<std::pair<int,int>>>;
}

void addEdge(int v, int w, int weight)
{
    auto sp = std::make_shared<std::pair<int,int>>(std::make_pair(v,weight));
    adj[v].push_back(sp);
}

int main()
{
    UndirectedGraph G1(7);//Ok
    G1.addEdge(0,1,9);//Ok
    G1.addEdge(1,2,5);//Ok
    G1.addEdge(2,0,8);//EXCEPTION RAISED HERE (if line is commented all run fine)
    return 0;
}
4

1 に答える 1