Прежде всего, Please see this discussion on why not to cast the return value of malloc()
and family in C
..
При этом здесь вы просто перезаписываете указатель, возвращаемый malloc()
. Не делай этого. Это приведет к утечке памяти. Кроме того, если вы попытаетесь разыменовать этот указатель позже, вы можете столкнуться с undefined behavior, так как нет гарантии, что этот указатель указывает на ячейку памяти , действительную. Доступ к недопустимой памяти приводит к UB.
Наконец, для решения
выделяет память для 2 цифр междунара [...]
позвольте мне сказать вам, вы выделение памяти для хранения два целых чисел , а не двухзначное целое число. Кроме того, чтобы сохранить целые значения в область памяти, указанную указателем, вам нужно разыменовать указатель, например *p
, и сохранить (присвоить) значение там, например *p=12345;
.
malloc()
выделяет память размером байт передается как аргумент. Проверьте sizeof(int)
(и 2*sizeof(int),
, если вы хотите), чтобы сделать его более понятным.
По этому поводу, ссылаясь на C11
, глава
void *malloc(size_t size);
malloc
функция выделяет место для объекта, размер которого определяется size
[...]
Итак, , malloc()
возвращает указатель с размером двух целых чисел (т. Е. Способен удерживать два целочисленных значения), а не два цифр или байт.
Кроме того, всегда рекомендуется проверять успех malloc()
перед использованием возвращаемого указателя, чтобы избежать возможного UB путем разыменования NULL в случае ошибки malloc()
.
1. Не бросайте 'malloc'. Ever 2. Как вы думаете, что на самом деле этот код? – UnholySheep