Проблема здесь в том, что память, которую вы выделите для L
внутри InitList()
, не будет отражена обратно к фактическому аргументу, переданному функции при вызове.
Итак, в вашемкод
if(n < 1) return ERROR;
InitList(L); ----------------(1)
srand(time(0));
for(i=0; i<n; i++)
{
s = malloc(sizeof(LinkList));
if(!s) return ERROR;
s->data = rand()%10+1;
s->next = L->next; -------------------(2)
L->next = s;
}
в точке (2), L
по-прежнему не инициализирован.При доступе к нему будет вызываться неопределенное поведение .
C использует передачу по значению, поэтому, если вам нужно изменить сам аргумент , вам нужно передать указатель натот.Что-то вроде
InitList(&L);
, а затем
Status InitList(LinkList **L)
{
*L = malloc(sizeof(**L));
if(!*L) return ERROR;
(*L)->next = NULL;
return OK;
}
должен выполнить эту работу.