我编写了一个返回数组的函数,但我知道应该返回动态分配的指针。然而,我仍然想知道当我返回在函数内部声明的数组(未将其声明为静态)时会发生什么,当我注意到内部数组的内存没有被释放并成功将这个数组返回给主函数时,感到很惊讶。
主函数:int main()
{
int* arr_p;
arr_p = demo(10);
return 0;
}
并且这个函数:
int* demo(int i)
{
int arr[10] = { 0 };
for (int i = 0; i < 10; i++)
{
arr[i] = i;
}
return arr;
}
当我解引用arr_p
,我可以在demo
函数中看到0-9整数集。
- 为什么当我检查
arr_p
时,我看到它的地址与demo
函数中的arr
相同? - 为什么
demo_p
指向的数据(0-9数字)不是已经在demo
函数中释放了?我期望demo
内部的arr
将在我们退出demo
作用域时被释放。