Я пытаюсь создать функцию, которая удаляет весь список, но я получаю сообщение об ошибке.
Все работает, кроме функции cleaner ().
#include <stdio.h>
#include <stdlib.h>
struct node{
int n;
struct node *next;
};
typedef struct node NOD;
NOD *create_first_node(int i)
{
NOD *q;
q=(NOD*)malloc(sizeof(NOD*));
q->n=i;
q->next=NULL;
return q;
}
NOD * add_to(NOD *x)
{
NOD *q;
q=(NOD*)malloc(sizeof(NOD*));
q->n=rand();
x->next=q;
q->next=NULL;
return q;
}
void show_list(NOD *p)
{
printf("root");
while(p->next){
printf(" -> %d",p->n);
p=p->next;
}
printf("\n");
}
void cleaner(NOD *p)
{
NOD *r;
while(p)
{
r=p;
p=r->next;
free(r);
r=NULL;
}
}
int main()
{
int i;
NOD *root,*c,*r;
root=create_first_node(1);
c=r=root;
c=add_to(root);
for(i=0;i<10;i++)
{
r=c;
c=add_to(r);
}
show_list(root);
//cleaner(root);
system("pause");
return 0;
}
NetBeans:
Получен сигнал: SIGTRAP (?) С sigcode? (?)
Из процесса:
Для списка программ pid -1
Вы можете отказаться от сигнала или переслать его, и вы можете продолжить или приостановить процесс
Чтобы контролировать, какие сигналы перехватываются или игнорируются, используйте Debug-> Dbx Configure
Visual Studio:
Ошибка отладки!
ОБНАРУЖЕНА КОРРУПЦИЯ КАРТЫ: после блока Normal (# 57) в
0x00393230
CRC обнаружил, что приложение записало в память после завершения буфера кучи.
(Я получаю эту ошибку с # 57, # 58, ..., # 68 каждый раз, когда cleaner () пытается освободить элемент списка)