В этой функции
void testing(){
int *p = malloc(sizeof(int));
*p = 5;
}
локальная переменная (указатель) p
имеет продолжительность автоматического хранения.
Для такого объекта, у которого нет типа массива переменной длины, его время жизни простирается от входа в блок, с которым он связан, до тех пор, пока выполнение этого блока каким-либо образом не закончится (стандарт C)).
Объект, который занимает выделенную память с помощью malloc, имеет выделенную продолжительность памяти.
Время жизни выделенного объекта распространяется от выделения до освобождения. (Стандарт C).
Так как память не была явно освобождена, время жизни объекта увеличивается до завершения программы. Вы не можете получить доступ к объекту или повторно использовать выделенную память, так как адрес, сохраненный в локальной переменной p
, теряется после выхода из функции. Эта ситуация вызывает утечку памяти.