我在尝试检查某些元素是否为NULL
时遇到分段错误。有人可以帮忙吗?
void addEdge(int i, int j)
{
if (i >= 0 && j > 0)
{
Node* whereto;
whereto = linkedAdjacencyList[i];
if(whereto != NULL)
{
while(whereto->adj != NULL)
{whereto = whereto->adj;}
whereto->adj = linkedAdjacencyList[j];
}
else{linkedAdjacencyList[i]->adj = linkedAdjacencyList[j];}
whereto = linkedAdjacencyList[j];
if(whereto != NULL)
{
while(whereto->adj != NULL)
{whereto = whereto->adj;}
whereto->adj = linkedAdjacencyList[i];
}
else{linkedAdjacencyList[j]->adj = linkedAdjacencyList[i];}
}
}
帮助!
编辑:这是新代码,根据您的建议,但现在调用方法时会立即出现分段错误?我会发布电话......
int edges;
in >> edges;
g.edges = edges;
for(int i = 0; i < edges; i++)
{
int first;
int second;
in >> first >> second;
g.addEdge(first, second);
}
答案 0 :(得分:1)
我建议linkedAdjacencyList[i]
返回NULL
,因此您尝试取消引用NULL
。只需为NULL
添加额外检查:
Node* whereto = NULL;
whereto = linkedAdjacencyList[i];
if (NULL != whereto){
while(whereto->adj != NULL) .....
答案 1 :(得分:0)
您似乎无法检查whereto
中是否正确初始化whereto = linkedAdjacencyList[i];
。
答案 2 :(得分:0)
表达式whereto -> adj != NULL
使用whereto
作为指针,并在结构或类的开头偏移处用adj
取消引用它。如果该语句是segfaulting,则意味着whereto
具有错误的指针值。检查linkedAdjancencyList[]
的内容,如果为NULL,则不要使用它。
答案 3 :(得分:0)
在while循环上方进行if检查,并检查whereto是否为NULL。
如果(向其中加入!= NULL){ while(whereto-&gt; adj!= NULL)......... }