Вам необходимо добавить строку #include <stdlib.h>
, чтобы malloc()
был правильно объявлен.
В нынешнем виде компилятор работает очень слабо (режим C89) и допускает неявные объявления функций, поэтому, когда компилятор сталкивается с malloc()
, он предполагает, что это функция, которая возвращает int
вместо правильно void *
.
Вам нужно изменить параметры компиляции, пока компилятор не будет жаловаться громче. Например, если вы используете GCC, вы должны учитывать:
gcc -std=c99 -Wall -Wextra -Wstrict-prototypes -Wmissing-prototypes ...
Вы можете предпочесть или даже использовать -std=gnu99
вместо -std=c99
; это позволяет использовать многие расширения, все еще используя основной язык C99. Но использование опций в том же духе и отсутствие предупреждений о компиляции - хорошая дисциплина. Использование -Werror
усиливает дисциплину; он преобразует любое предупреждающее сообщение от компилятора в ошибку, поэтому компиляция не удалась.