快速提问。这会泄漏吗?为什么/为什么不呢?
int main()
{
int array[] = {1,2,3};
doStuff(array);
return 0;
}
当doStuff
执行此类操作时
void doStuff(int * arr)
{
// ...
arr = new int [50];
// ...
}
为@Scott Hunter编辑
我认为它不会泄漏,因为array
指向堆栈上的内存并且我从未听说过堆栈中的内存泄漏,但另一方面我丢失了与此内存的任何链接。
EDIT2
我的问题是我认为更改arr
地址中的doStuff
也会改变array
中的main
,但它不会。
答案 0 :(得分:7)
是的,它会泄漏,因为您无法在delete [] arr;
内的任何地方拨打doStuff()
。
请注意,您甚至无法更改在函数外部声明的int array[];
您所做的只是更改通过值参数传递为的指针的副本。
作为旁白的建议:
不要在c ++中使用原始指针和原始数组。而是根据你的情况使用std::vector<int>
,而忘记动态内存管理。
答案 1 :(得分:5)
doStuff
获取array
指针的副本。将arr
设置为doStuff
正文中的其他内容不会修改array
中的原始main
值。
因此,除非您在delete[] arr
内拨打doStuff
,否则您的代码将泄露。