2016-09-30 7 views
0

空リストの配列を作成し、main()およびGraph()コンストラクタ内からこれらのリストの位置を出力しようとしました。しかし、彼らは一致しません!助けてください!リストの配列 - コンストラクタ内のアドレスとmain()内のアドレスが一致しません

#include<iostream> 
#include<list> // use list in STL 

using namespace std; 

struct Edge { 

    int v, w; 

    Edge(int v = -1, int w = 0) : v(v), w(w){} 

}; 

class Graph { 

    private: 

    const int V; //number of vertices 

    int E; //number of edges 

    list<Edge>* adj[];//adjacency list 

    public: 

    Graph(int N):V(N){ //create a graph with no edges 

     E = 0; list<Edge>* adj[V]; 

     for(int i = 0; i < N; i++){ 

     adj[i] = new list<Edge>(); 

     cout << "at " << i <<" address "<< adj[i] <<"\n"; 

     } 

    } 

    friend ostream& operator<<(ostream& out, const Graph& G); 

}; 

ostream& operator<<(ostream& out, const Graph& G){ 

    out << "Vertices: "<< G.V <<" and Edges: "<< G.E <<"\n" << "The adjacency list:\n"; 

    for(int i = 0; i < G.V; i++){ 

    out << "vertex "<< i << ":"<< G.adj[i] <<" -> zero\n"; 

    } 

    return out; 

} 

int main() { 

    Graph* G = new Graph(50); 

    cout << *G; 

} 
+1

この定義で何を期待していますか?リスト * adj []; '? – Amadeus

+3

'E = 0;リスト * adj [V]; 'ここでローカル変数を作成しています。 –

+0

出力を含めることができませんでした。 1行に2つのステートメントがあるコードがあります。これはバグがある行です。あなたのメソッドはクラスメンバをシャドウし、コンパイラに '-Wall'を渡すことで、あなたが間違っていたことを警告してくれました。 – Yakk

答えて

-2

ジョニーMOPPは、

感謝をflatmouse。

が次のコードに変更されました。出来た。

グラフ(int型N):V(N){

E = 0; 

    for(int i = 0; i < N; i++){ 

    adj[i] = new list<Edge>(); 

    } 

} 

~Graph(){ 

    for(int i = 0; i < V; i++) 

     delete adj[i]; 

} 

サンプル出力:

0xec3c40

0xec4070

0xec4090

アドレス2のアドレス1のアドレス0で

at 3アドレス0xec40b0

//

頂点0:0xec3c40 - >ゼロ

頂点1:0xec4070 - >ゼロ

頂点2:0xec4090 - >ゼロ

頂点3:0xec40b0 - >ゼロ

+3

おもちゃの 'main'プログラムを持っているので、"働く "だけです。 'main'を' Graph'オブジェクトを割り当てたりコピーしたりする場所に変更すると、メモリーリーク、ダブルフリーなどが表示されます。私が言及したflatmouseの解決策はそれらの問題を取り除きます。 – PaulMcKenzie

関連する問題