int *pointer2number = (int *) malloc(sizeof(int));
pointer2number = &number;
Вы назначаете адрес number
указателю pointer2number
и этим заменяете адрес выделенной динамической c памяти, хранящейся в pointer2number
ранее.
То же самое происходит для второй попытки с number2
.
Любая попытка free()
памяти, ранее не выделенной функцией управления памятью, вызывает неопределенное поведение:
" Функция free заставляет пространство, на которое указывает ptr, освобождается, то есть становится доступным для дальнейшего выделения. Если ptr является нулевым указателем, никаких действий не происходит. В противном случае , если аргумент не соответствует указателю, ранее возвращенному функция управления памятью, или если пространство было освобождено вызовом free или reallo c, поведение не определено ."
Источник: ISO / IEC 9899: 2018 (C18), Раздел 7.22.3.3/2
И как побочный эффект, ранее выделенная динамическая c память не соответствует free()
d и с этим.
вдумайтесь в логи c своей проги баран!