私は C++ で初心者の問題を抱えています。次のように定義され
た構造体があります。Edge
struct Edge {
int position[4];
int average;
};
ここで、これらの構造体をたくさん作成する必要があり、そのためのヘルパー メソッドを作成しました。これは、いくつかのパラメーターに基づいてこれらの構造体の配列を作成します。
Edge* createEdges(int some_parameters){
Edge *edges = new Edge[8];
for(int i = 0 ; i < 8; i++){
Edge edge;
edge.position[0] = 1; //fill the rest of the edge array in the same manner
edge.average = 10;
edges[i] = edge;
}
return edges;
}
ただし、今電話Edge *edges = createEdges(int some_parameters)
すると、エッジ配列に適切なデータがありません(範囲外ですか?)。
ここでいくつかのことを混同していると思いますが、データ構造に頼らずにこれを機能させることができればvector
幸いです。これはこれを処理する通常の方法ですか、それともエッジ配列を自分で宣言し、それをヘルパー メソッドに渡して埋める必要がありますか?
編集:
まず第一に、コメント/ヒント/ヒント/アドバイス/...私が見落としていた問題を簡単に見つけるのを助けてくれた皆さんに感謝します.
コードが機能するはずであるという返信を見た後、簡略化されたコードもテストしました (最初に行うべきことでした)。驚くべきことに、機能しました。次に、実際のコードが機能せず、簡略化されたバージョンが機能した理由を確認しました。
私の実際のコードは次のようになりました。
Edge* createEdges(int some_parameters){
Edge* edges = new Edge[8];
if(some_parameter != 0){
//create the edges as in my 1st snippet
return NULL; //doh, should return edges here !
} else {
return NULL;
}
}
単純に間違った値 (NULL) を返したことに気付かなかった理由は、デバッガーが0xf6f6f6
いくつかの負の値を持つアドレスを表示したためですedge.position
(よく理解できないもので、単に表示されるべきだったのです0x000000
が、おそらく私は想像するだけです)。
全体として、これは、午前 3 時以降にコーディングしてはならない理由についての重要な教訓でした。