Раз у вас stdlib.h закомментирован, вы, наверно, знаете, откуда malloc взялся. Попробуем раскрутить ошибки.
note: include ‘ stdlib.h ’ or provide a declaration of ‘malloc’
Компилятор, очевидно, знает, где этот malloc завалялся…
warning: implicit declaration of function ‘malloc’ [-Wimplicit-function-declaration]
…но неявно объявляет функцию.
warning: incompatible implicit declaration of built-in function ‘malloc’
Неявное определение int* malloc(int). Реальное void* malloc(size_t). Преобразовать (int*)malloc надо было.
Почему всё-таки запустилось? А потому, что на целевой машине size_t = unsigned int, а размеры указателей совпадают практически всегда. После того, как функция неявно объявилась, линкер подцепил на её место стандартную, и соглашения вызова совпали.