Давайте посмотрим на эту строку кода:
struct ListNode* test = malloc(sizeof(struct ListNode*));
Указатель test
хочет указать на блок памяти, достаточно большой для того, чтобы держать фактическое честное отношение к совершенству struct ListNode
объект. У этого объекта есть целое число и указатель.
Однако, ваш вызов malloc
говорит: «Пожалуйста, дайте мне достаточно места для хранения указателя на struct ListNode
объекте». Недостаточно памяти для хранения struct ListNode
, отсюда и ошибка.
Один из способов исправить это - удалить звездочку из struct ListNode
в вашем вызове sizeof
:
struct ListNode* test = malloc(sizeof(struct ListNode));
Другой вариант, который довольно симпатичен, заключается в использовании этого подхода:
struct ListNode* test = malloc(sizeof *test);
Это говорит о том, что «количество места, которое мне нужно, это количество пространства, на которое объект, на который указывает test
, будет требуют «. Это бывает sizeof (struct ListNode)
, и нет необходимости печатать тип с помощью этого второго подхода.
Как примечание, ошибка, которую вы получаете, является ошибкой runtime , а не ошибка компилятора . Код, который у вас есть, является допустимым C кодом, но просто не будет работать при запуске программы.