Неверный свободный Valgrind - PullRequest
1 голос
/ 08 марта 2012

по какой-то причине вызов моей функции 'delAll' более одного раза вызовет недопустимую ошибку free от Valgrind.Я не понимаю, почему, если я вызову эту функцию во второй раз, программа снова войдет в цикл while, хотя это просто "delAll" узла

// p - это связанный список с вызовом

struct node{
char *str, int data, struct node *next;
}

// вот функция, с которой у меня проблемы:

void delAll()
{

struct node *temp,*temp2;
temp=p;
while(temp!=NULL)
{

    temp2=temp;
    temp= temp->next;

    free(temp2->str);
    free(temp2);

}

}

1 Ответ

1 голос
/ 08 марта 2012

p - указатель на ваш список, и сейчас он все еще будет после вызова DelAll указывать на (free'd) начало списка. Я бы просто сделал;

p=NULL;

... сразу после цикла while, чтобы установить значение p равным нулю (т.е. правильно очистить список). Это помешает вашему delAll снова попытаться освободить все элементы.

Конечно, это будет зависеть от того, что p будет не просто временной переменной, я предполагаю, что это настоящий указатель "начала списка".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...