Придерживаясь вашего примера, правильное использование malloc
выглядело бы так:
#include <stdlib.h>
int main()
{
int *ptr = NULL;
ptr = malloc(sizeof(int));
if (ptr != NULL)
{
*ptr = 3;
free(ptr);
}
return 0;
}
Если вы изучаете CI, вы должны научиться читать сообщения об ошибках и приходить к этому.Вывод сам.Давайте разберем их:
prog.c:1: warning: conflicting types for built-in function ‘malloc’
malloc
- это стандартная функция, и я думаю, gcc
уже знает, как она объявлена, рассматривая ее как "встроенную".Обычно при использовании стандартных библиотечных функций вы хотите #include
правильный заголовок.Вы можете выяснить, какой заголовок основан на документации (man malloc
).
В C ++ вы можете объявить функции, которые имеют то же имя, что и уже существующие функции, с другими параметрами.C не позволит вам сделать это, и поэтому компилятор жалуется.
prog.c:3: warning: passing argument 1 of ‘malloc’ makes pointer from integer without a cast
prog.c:3: error: too few arguments to function ‘malloc’
Ваш malloc
вызывает себя.Вы сказали, что первый параметр был void*
и у него было два параметра.Теперь вы вызываете его с целым числом.
prog.c:8: error: ‘NULL’ undeclared (first use in this function)
NULL
объявлено в стандартных заголовках, и вы не #include
их.
prog.c:9: warning: implicit declaration of function ‘AllocateMemory’
Вы только что вызвали функциюAllocateMemory
, не сообщая компилятору, как он должен выглядеть.(Или предоставляя реализацию, которая создаст ошибку компоновщика.)
prog.c:12: warning: ‘return’ with no value, in function returning non-void
Вы сказали, что main вернет int
(как и должно быть), однако вы только что сказали return;
без значения.