Сверху вниз:
1.
Вы забыли #include stdlib.h
использовать calloc()
и malloc()
. Неявные объявления запрещены, начиная с C99.
2.
int main(int argc, char* argv[])
Ваша программа не нуждается в передаче аргументов.
Это:
int main (void)
было бы более подходящим.
3.
int size = 0;
size
никогда не должно иметь отрицательного значения. Поэтому было бы правильнее объявить его как unsigned int
или даже лучше size_t
.
4.
struct testMalloc* test = 0 ;
Вы можете использовать 0
для инициализации указателя. Это совершенно верно, поскольку 0
- это константа нулевого указателя . Но лучше использовать NULL
при работе с указателями, а не 0
, чтобы показать назначение указателя и повысить удобочитаемость.
struct testMalloc* test = NULL;
5.
calloc(sizeof(struct testMalloc));
calloc
требуется два аргументы по сравнению с malloc
. Первый должен быть количеством элементов, а второй размер одного элемента.
calloc(sizeof(1,struct testMalloc));
6.
test = (struct testMalloc*) calloc(sizeof(struct testMalloc));
Вам не нужно приводить возвращаемое значение malloc()
или calloc()
.
7.
Вы забыли чтобы проверить возвращенный указатель из calloc()
на нулевой указатель, если выделение не удалось. Всегда проверяйте возвращаемое значение функций управления памятью.
test = calloc(1, sizeof(struct testMalloc));
if (test == NULL)
{
fputs("Allocation failed!", stderr);
// error routine.
}