学习C++中关于动态内存分配和指针的疑问

如果我在函数中创建的指向动态分配的内存的指针没有return回去,那main函数里还能找到那边我分配的动态内存吗?我一开始认为是不行的,函数中创建的指针应该是静态变量,应该随着函数的结束而被释放。但实际的程序运行,却和我想的不一样。有人能为我解惑吗?

#include
using namespace std;
int * func()
{
    int * p=new int(10);
    return p;
}
int main()
{
    int * p=func();
    cout<<*p<return 0;
}

img

img

如果我在函数中创建的指向动态分配的内存的指针没有return回去,那main函数里还能找到那边我分配的动态内存吗?
====找不到了,内存泄漏了
你这只是因为p是函数返回前最后一个变量,默认被返回了。但不能把这当成必然啊

该回答引用GPTᴼᴾᴱᴺᴬᴵ
在函数中创建的指向动态分配的内存的指针,如果没有return回去,那么在main函数中将无法访问到这块内存,因为它的生命周期已经结束,会被释放。在你的代码中,函数func()返回了指向动态分配内存的指针,所以可以在main函数中访问到这块内存。
·
在你的代码中,每次输出p的值都是10,这是因为你在函数func()中使用了new int(10)来动态分配了一个内存,并且将其初始化为10。在main函数中,你调用了func(),并将其返回值(即指向分配内存的指针)赋值给指针变量p。然后,你两次输出p的值,它们都是10,因为p指向的内存单元中的值一直没有改变。