Всякий раз, когда память выделяется таким образом, она резервируется в «Куче». Это область памяти, выделенная вашей программе операционной системой. Используя функции выделения в C ++, например: new()
или malloc()
(есть и другие), непрерывный блок этой кучи зарезервирован, и адрес его (указатель) возвращается вызывающему коду.
Так в вашей функции:
int *allocater()
{
int *x = new int(1);
return x;
}
Зарезервирован один фрагмент памяти целого размера (вероятно, 4-8 байт), и возвращается адрес этой памяти. Этот адрес является просто числом, когда число интерпретируется как место в памяти, оно называется указателем, но все равно это просто число.
Таким образом, когда ваша функция возвращается, память все еще выделяется в куче. Если ваша программа забывает этот номер, эта память «вытекла» - ваша программа не может отменить выделение с помощью delete()
, delete[]()
или free()
, потому что у вас нет номера, чтобы указать функции перераспределения, где бесплатно.
В вашем коде, поскольку вы храните возвращаемое значение из allocater()
, можно отменить выделение блока с помощью delete
. Таким образом, ваш код работает нормально, и память распределяется правильно.