Как избавиться от ошибки сегментации NULL? - PullRequest
1 голос
/ 18 сентября 2011

Я создаю программу связанного списка в C и продолжаю получать ошибку сегментации. Я сузил проблему до нескольких строк кода и считаю, что это связано с проверкой на NULL. Как я могу это исправить? Вот код:

typedef struct node
{
  int contents;
  struct node *nextNode;
}  Node;



deleteNode(Node *currentNode)
{

  while((currentNode->contents) != NULL)
  {
    //.....Do Stuff.....
    currentNode = currentNode->nextNode;
  }
}

Спасибо

Ответы [ 4 ]

7 голосов
/ 18 сентября 2011

Попробуйте проверить, чтобы убедиться, что currentNode не NULL в начале deleteNode().Т.е.

deleteNode(Node *currentNode)
{
    if (currentNode == NULL) return;
    // ...
    // ...
}
4 голосов
/ 18 сентября 2011

Если проблема, как я подозреваю, currentNode - нулевой указатель.Просто убедитесь, что currentNode не является нулевым, прежде чем пытаться получить к нему доступ.

deleteNode(Node* currentNode)
{
    while ((currentNode != NULL) && (currentNode->contents != NULL))
    {
        /* ... */
        currentNode = currentNode->nextNode;
    }
}
0 голосов
/ 19 сентября 2011

что происходит, когда currentNode равен NULL?Это разыменование пустой памяти в состоянии while.

0 голосов
/ 18 сентября 2011

Ну, я подозреваю, что эта строка:

while((currentNode->contents) != NULL)

сравнивает поле contents вашей Node структуры, которая является int, с NULL ... Я бы предположил, что вместо этого должна была проверяться currentNode->nextNode!

Итак, вероятно: ни один из ваших contents не равен нулю, поэтому этот тест верен для каждого элемента в списке. Затем последний элемент имеет значение NULL currentNode->nextNode, присвоенное currentNode, и он разыменовывается, разыменовывая его в следующий раз в цикле.

...