具有预定义大小的C ++数组作为成员变量和内存泄漏

时间:2016-01-03 23:34:22

标签: c++ arrays memory-leaks

我希望我的问题不多余。我找到了一些与我的问题很接近的帖子,但不完全一样。

我有一段代码如下:

div#livefyre-comment

我的代码中是否有内存泄漏?或者这样可以吗?我不知道应该如何处理数组。

谢谢, 朱

2 个答案:

答案 0 :(得分:4)

myObject = new myClass();仅修改函数内的本地指针,而不是main中声明的指针。

这就是为什么在myClass内分配的myFunction对象被泄露,并且最终双重删除main中指针指向的对象(这是未定义的行为)。< / p>

这是因为指针默认是通过副本传递的。如果您希望函数修改main中的指针,请传递对它的引用:

int myFunction(myClass*& myObject)
                       ^

关于数组,它是一个自动变量。因此它与当前堆栈帧相关联,因此自动释放,您无需执行任何操作。如果您已使用new[]手动分配了数组,,那么您是否需要明确delete[]它。

答案 1 :(得分:3)

myObject被删除两次,位于myFunction内和main内。

这是未定义的行为。

原因是myObject = new myClass();内的作业myFunction更改了myObject中的局部变量,而不是main变量(因为它是按值传递的)。

如果打算在myFunction内重新分配一个对象并且匹配new / delete,请考虑通过引用传递指针:

int myFunction(myClass*& myObject)

但请同时阅读 @Cheers和hth的评论。 - Alf