ここでの最初の質問なので、私の投稿で見つけた正式な間違いについてお詫び申し上げます。
ベクトルに基づく隣接リストを使用する必要がある「無向連結加重グラフ」の単純なクラスをコーディングしています。
問題は、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;
}