我正在處理這段代碼,並且一直在收到分段錯誤。對於我的生活,我不知道爲什麼,我知道一個分段錯誤是當你試圖遵循一個空指針時,但事實是,在我的代碼中,「u-> previous」isnt null,既不是「u」,I檢查。如果我將while循環中的條件更改爲(u!= NULL),它會在「u-> isGreen」發生故障前迭代兩次,再一次檢查每個迭代以查看u是否爲空。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;
}
「節點」是指向實際節點對象的指針數組。我確定我的節點中存在「u-> previous」,並且「isGreen」被初始化爲false;
繼承人的Node類,如果你想看到的是:
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'類的實現。 –
'extractOptimalPath()'和'extractOptimalPath(Node * graph []);'是什麼關係? – cnicutar
你使用過調試器嗎?它可能有助於瞭解「u」究竟指的是什麼(它不足以知道它不是'0')。 –