Функция правильная. Но ваша логика c не так уж и плоха. Переменная p
фактически локальна и больше не будет существовать, когда функция вернется. Однако p
- это не память, выделенная вами с помощью malloc
, а переменная, хранящая адрес памяти, выделенной вами .
Таким образом, оператор return p;
вернет копия p
, то есть копия адреса памяти, выделенной вами с помощью malloc()
.
В связанном вопросе пользователь создает локальный массив и возвращает указатель на Это. Видите, массив local и теперь динамически выделяется с помощью new
или malloc()
. Таким образом, его переменная эффективно содержит (автоматически) выделенную память, а не ее адрес. Однако возвращается только адрес, поэтому память теряется.