Я создал связанный список со следующим кодом. Как вы можете видеть, я использовал malloc для создания списка размером 3. Но я инициализировал цикл for размером 10 для инициализации и печати.C Размер связанного списка не ограничен malloc
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
struct node {
int value;
struct node *next;
};
int main() {
//code
struct node **head;
struct node *curr;
curr = (struct node *) malloc(sizeof(struct node)*3);
head = &curr;
printf("done 1\n");
(*head)->value = 0;
(*head)->next = NULL;
for(int i = 1; i < 10; i++) {
(*head+i-1)->next = (*head+i);
(*head+i)->value = i;
(*head+i)->next = NULL;
}
curr = *head;
printf("done 2\n");
for(int i = 0; i < 10; i++) {
printf("%d\t", (*head + i)->value);
//curr = curr->next;
}
printf("\ndone 3\n");
//free(curr);
return 0;
}
, когда я скомпилировать и запустить код, полученный результат,
done 1
done 2
0 1 2 3 154208560 842282289 876087600 154744882 808859448 875837236
done 3
Почему я смог присвоить значения 4 узла и доступ к нему, когда я на самом деле создал список размером 3 ?
Я вижу, что значения мусора печатались с доступа 5-го до 10-го узла. Но как создается 4-й узел?
P.S:
Я знаю, что 10 = 3!. Код работал правильно, когда я поставил цикл в свои пределы. Я хотел посмотреть, что произойдет, когда мы выйдем за пределы. Я вижу, что 4-й узел также был создан, так как мне удалось присвоить значение, когда я на самом деле создал список размером 3.
Это чисто, чтобы увидеть, не получится ли я от сбоя или нет.
'10! = 3' ... если я правильно понимаю ваш код. – wildplasser
Доступ за пределами выделенной памяти - это [неопределенное поведение] (https://stackoverflow.com/questions/2397984/undefined-unspecified-and-implementation-defined-behavior). Все может случиться, в том числе работать. – user3386109
Не так ли? Я этого не знал! Я знаю, что 10! = 3. Код работал правильно, когда я поставил цикл в свои пределы.Я хотел посмотреть, что произойдет, когда мы выйдем за пределы. Я вижу, что 4-й узел также был создан, так как мне удалось присвоить значение, когда я фактически создал список размером 3. – Aspirant9