快问.这会泄漏吗?为什么/为什么不呢?
int main()
{
int array[] = {1,2,3};
doStuff(array);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
何时doStuff会做这样的事情
void doStuff(int * arr)
{
// ...
arr = new int [50];
// ...
}
Run Code Online (Sandbox Code Playgroud)
编辑@Scott Hunter我认为它不会泄漏,因为array指向堆栈上的内存并且我从未听说过堆栈中的内存泄漏,但另一方面我有点丢失了这个内存的任何链接.
EDIT2我的问题是我的想法是改变arr在doStuff地址将改变array中main以及,但它不会.
是的,它会泄漏,因为你不会delete [] arr;在里面任何地方打电话doStuff().
请注意,您甚至不更改int array[];函数的声明外部.
您所做的只是更改由value参数传递的指针的副本.
作为一个建议:
不要在c ++中使用原始指针和原始数组.而是std::vector<int>根据你的情况使用a ,完全忘记动态内存管理.
doStuff需要复制的的array指针.设置arr为正文内的其他内容doStuff不会修改原始array值main.
因此,除非您delete[] arr在内部调用,否则您doStuff的代码将泄漏.