gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 23:54:55 24 4
gpt4 key购买 nike

希望我的问题不是多余的。我发现一些帖子与我的问题很接近,但并不完全相同。

我有一段代码是这样的:

 class myClass
{
public:
myClass(){
for(int i=0;i<1000;i++){
myArray[i]=i;
}
};
~myClass(){};

int getValue(int index){return myArray[index];}

private:
int myArray[1000];
} ;

int myFunction(myClass* myObject)
{
int res=0;
for(int i=0;i<1000;i++){
res=res+myObject->getValue(i);
}
delete myObject;
myObject = new myClass();
return res;
}

int main()
{
myClass *myObject = new myClass();
int res= myFunction(myObject);

delete myObject;
return res;
}

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

谢谢,朱尔斯

最佳答案

myObject = new myClass(); 只修改函数内部的局部指针,而不修改 main 中声明的指针。

这就是为什么在 myFunction 中分配的 myClass 对象被泄露,你最终将 main 中的指针指向的对象双删除到(这是未定义的行为)。

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

int myFunction(myClass*& myObject)
^

关于数组,它是一个自动变量。所以它绑定(bind)到当前堆栈框架并因此自动释放,您无需执行任何操作。如果您使用 new[] 手动分配了数组, 那么您是否需要明确地delete[] 它。

关于具有预定义大小的 C++ 数组作为成员变量和内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34582877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com