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

时间:2017-05-15 17:48:30

标签: c++ memory-leaks

快速提问。这会泄漏吗?为什么/为什么不呢?

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,但它不会。

2 个答案:

答案 0 :(得分:7)

是的,它会泄漏,因为您无法在delete [] arr;内的任何地方拨打doStuff()

请注意,您甚至无法更改在函数外部声明的int array[]; 您所做的只是更改通过值参数传递为的指针的副本。

作为旁白的建议:

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

答案 1 :(得分:5)

doStuff获取array指针的副本。将arr设置为doStuff正文中的其他内容不会修改array中的原始main值。

因此,除非您在delete[] arr内拨打doStuff,否则您的代码泄露。