我希望我的问题不多余。我找到了一些与我的问题很接近的帖子,但不完全一样。
我有一段代码如下:
div#livefyre-comment
我的代码中是否有内存泄漏?或者这样可以吗?我不知道应该如何处理数组。
谢谢, 朱
答案 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