C++是内存泄漏吗?指向数组的指针在另一个函数中动态调整

Squ*_*are 0 c++ memory-leaks

快问.这会泄漏吗?为什么/为什么不呢?

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我的问题是我的想法是改变arrdoStuff地址将改变arraymain以及,但它不会.

πάν*_*ῥεῖ 7

是的,它会泄漏,因为你不会delete [] arr;在里面任何地方打电话doStuff().

请注意,您甚至不更改int array[];函数的声明外部.
您所做的只是更改由value参数传递的指针的副本.


作为一个建议:

不要在c ++中使用原始指针和原始数组.而是std::vector<int>根据你的情况使用a ,完全忘记动态内存管理.


Vit*_*meo 5

doStuff需要复制的的array指针.设置arr为正文内的其他内容doStuff不会修改原始arraymain.

因此,除非您delete[] arr在内部调用,否则您doStuff的代码泄漏.