我目前无法从以下程序中找到分段错误的来源。
struct info
{
std::list<int> bfs;
int *level;
int *distance;
};
...
info* Graph::BFS(int s)
{
info *tmp = (info*) malloc(sizeof(struct info));
tmp->level = new int[V];
tmp->distance = new int[V];
...
tmp->bfs.push_back(s); !! <- causes a segmentation fault
tmp->level[s] = 0; <- seems to work ok
int current;
std::list<int>::iterator i;
while (!myqueue.empty())
{
current = myqueue.front();
myqueue.pop();
tmp->bfs.push_back(current); <- causes segmentation fault
....
return tmp;
}
我也尝试过以下操作,但没有成功:
info *tmp = (info*) malloc(sizeof(struct info));
std::list<int> bsf;
tmp->bsf = bsf // and then call tmp->bsf.push_back()....
答案 0 :(得分:4)
问题在于将C ++代码与C代码混合。
在本声明中
info *tmp = (info*) malloc(sizeof(struct info));
为结构分配内存而不调用其数据成员的构造函数,
而不是malloc
,您必须使用运算符new
。否则,将不构建数据成员std::list<int> bfs;
。