私はこのコードを作業していますが、セグメンテーションエラーが発生しています。私の人生のために、私はなぜ、私はあなたがnullポインタをたどろうとするとセグメント違反があることを知ることはできませんが、事は、私のコードでは "u->前の" isntヌル、どちらも "u"チェックwhileループの条件を(u!= NULL)に変更すると、「u-> isGreen」にフォールトする前に2回反復されます。もう一度、すべての繰り返しをチェックして、uがnullかどうかを確認します。C++は分かりにくいセグメンテーションエラー
int extractOptimalPath() {
Node *u = nodes[NUM_NODES - 1];
int i = 0;
while (u != NULL) {
cout << i << endl;
u->isGreen = true;
u = u->previous;
i++;
}
return 0;
}
"nodes"は、実際のNodeオブジェクトへのポインタの配列です。私は自分のノードに "u-> previous"が存在し、 "isGreen"がfalseに初期化されていることを確認しています。ワンセグ障害を引き起こしている可能性が何
class Node {
public:
GLfloat x, y, z;
int numLinks;
Node *link1;
Node *link2;
GLfloat distance;
Node *previous;
bool isGreen;
Node(GLfloat x, GLfloat y, Node *link1, Node *link2);
Node(GLfloat x, GLfloat y, Node *link1);
Node();
Node(GLfloat x, GLfloat y);
~Node();
bool dijkstra(Node* graph[], Node *source, Node *target); //returns true if a path to target is found
int dist(Node *n1, Node *n2);
int extractOptimalPath(Node* graph[]);
};
:
相続人Nodeクラスは、ケースであなたはそれを見たいですか?
あなたは 'Node'クラスの実装も含めるべきです。 –
'extractOptimalPath()'と 'extractOptimalPath(Node * graph []);の関係は何ですか? – cnicutar
デバッガを使用しましたか?正確に 'u'が何を指しているのか知るのに役立ちます(' 0'でないことを知るのに十分ではありません)。 –