NULL检查中的分段错误?

时间:2011-04-13 02:50:34

标签: null segmentation-fault

我在尝试检查某些元素是否为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);
}

4 个答案:

答案 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)......... }