c ++:初始化指针队列时获取段错误

时间:2011-09-27 06:15:57

标签: c++ initialization queue segmentation-fault breadth-first-search

我正在尝试实现CLRS中描述的BFS算法。并有以下内容:

#include <iostream>
#include <list>
#include <queue>
#include <string>
#include <sstream>
using namespace std;
struct Node{
    char colour;
    int numNbr;
    Node* parent;
    int distance;
    int* neighbours;
    int* costs;
    int name;
    Node(int _numNbr,int _name){
        name = _name;
        colour = 'w';
        parent = 0;
        distance = -1;
        neighbours = new int[_numNbr];
        costs      = new int[_numNbr];
        numNbr = _numNbr;
    }
};

list<Node*> bfs(Node** &nodes,int numNodes,int startNode) {
    cout << "performing BFS\n";
    for(int i = 0; i < numNodes;i++) {
        nodes[i]->colour = 'w';
        nodes[i]->parent = 0;
    }
    cout << "All nodes painted white" <<endl;
    queue<Node*> q; // segfault occurs here
    cout << "initialised a queue" << endl;
    list<Node*> l;
    cout << "initialised a list" << endl;
    nodes[startNode]->colour = 'g';
    nodes[startNode]->distance = 0;
    q.push(nodes[startNode]);
    Node* u;
    Node* v;
    while(!q.empty()){
        u = q.front();
        for(int i = 0;i < u->numNbr; i++) {
            v = nodes[u->neighbours[i]];
            if(v->colour == 'w'){
                v->colour = 'g';
                v->distance = (u->distance)+1;
                v->parent = u;
                q.push(v);
            }
        }
        l.push_front(u);
        u->colour = 'b';
        q.pop();
    }
    return l;
}

int main(){
    int nodeCount;
    cin >> nodeCount;
    cin.ignore();
    Node** nodes = new Node*[nodeCount+1];
    for(int i = 0; i < nodeCount; i++){
        .... // build up the nodes in the adjacency list
    }
    list<Node*> l = bfs(nodes,nodeCount,1);
    cout << "BFS of nodes\n";
    for(list<Node*>::iterator it = l.begin();it != l.end();it++){
        cout << (*it)->name << " ";
    }
    cout << endl;
    return 0;
}

但是当我运行它时,我只得到队列初始化时的以下输出后跟segfault

jonathan@debian:~/Code/cpp/dijkstra$ ./dijkstra 
3
1 2 1 3 1
2 3 1
3 1 1

performing bfs
All nodes painted white
Segmentation fault

我正在使用以下命令进行编译:

g++ -Wall  -o dijkstra dijkstra.cpp

1 个答案:

答案 0 :(得分:0)

list<Node*> bfs(...
你回来时

return l;

此外,无需参考:

Node** &nodes

在你指出的地方没有发生段错误。 I / O缓冲区并没有因为它而变得充实,它就像这样懒散了

cout << "initialised a queue" << endl;
list<Node*> l;
cout << "initialised a list" << endl;

未执行