Ошибка сегментации в проверке NULL? - PullRequest
3 голосов
/ 13 апреля 2011

Я получаю ошибку сегментации при попытке проверить, являются ли некоторые элементы 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];}
            }
    }

help!

РЕДАКТИРОВАТЬ: это новый код, согласно вашим предложениям, но теперь сразу возникает ошибка сегментации при вызове метода?я отправлю вызов ...

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 ]

1 голос
/ 13 апреля 2011

Я полагаю, что linkedAdjacencyList[i] возвращает NULL, поэтому вы пытаетесь разыменовать NULL.Просто добавьте дополнительную проверку для NULL:

Node* whereto = NULL;
whereto = linkedAdjacencyList[i];
if (NULL != whereto){
while(whereto->adj != NULL) .....
0 голосов
/ 13 апреля 2011

Установите проверку if над циклом while и проверьте, имеет ли значение where значение NULL.

if (whereto! = NULL) {while (whereto-> adj! = NULL) .........}

0 голосов
/ 13 апреля 2011

Выражение whereto -> adj != NULL использует whereto в качестве указателя и разыменовывает его с помощью adj по смещению от начала структуры или класса.Если этот оператор является segfaulting, это означает, что whereto имеет неверное значение указателя.Проверьте, что получается из linkedAdjancencyList[], и не используйте его, если NULL.

0 голосов
/ 13 апреля 2011

Вы, похоже, не проверяете, правильно ли инициализируется whereto в whereto = linkedAdjacencyList[i];.

...