【发布时间】:2013-12-19 19:10:43
【问题描述】:
程序seg一旦到达这行代码就会出错(代码在函数set_array的Graph.cpp中。)
adjList[adjList.size()].push_back(Edge(vertex, 0));
基本上,我希望每次我需要使向量更长以适应更多链表时调用此行,因为该结构是链表的向量。这是声明链表向量及其内容的 .h 文件。每个节点都将包含一个顶点和一个权重。 (节点类称为class Edge。)
#ifndef GRAPH_H_INCLUDED
#define GRAPH_H_INCLUDED
//class MinPriority;
#include <iostream>
#include <string>
#include <vector>
#include <list>
using namespace std;
class Graph
{
public:
Graph();
~Graph();
void set_Edge(string targetVertex, string vertex, int weight);
void set_array(string vertex);
void print_Test();
friend class MinPriority;
private:
class Edge
{
public:
Edge(string vertex, int weight)
{m_vertex = vertex; m_weight = weight;}
~Edge(){}
string m_vertex;
int m_weight;
};
vector< list<Edge> > adjList; //declaration of the array of linked lists
};
#endif // GRAPH_H_INCLUDED
这就是我想要adjList[adjList.size()].push_back(Edge(vertex, 0)); 做的事情;基本上每次我想在图中插入一个新顶点时,我都会调用它。一旦我尝试将第一项放入树中,它就会出现故障。我会调用插入权重为“0”的“A”,它会立即出现段错误。顺便说一句,我正在尝试制作一个邻接列表,我使用adjList[adjList.size()].push_back(Edge(vertex, 0)); 在图中添加一个新的(未使用的)顶点。让我们假设这是传递给函数...
A B C D
执行此操作后,向量的长度应该增加 4。但当然它会在该行出现段错误(它在 GDB 中告诉我)。我对使用这种奇怪的数据结构非常陌生,因此非常感谢任何帮助。
【问题讨论】:
-
你能告诉我们你声明 adjList[] 的代码吗?
标签: list vector segmentation-fault