好的,我很难理解我做错了什么。在我的头文件中,我有一个指向图像指针数组的指针:
Image **images;
int maximum; //size
这是一个名为scene的类的一部分。现在,scene有一个名为changemax的成员函数,它改变了images数组的大小。你可以减少或增加。
所以我所做的就是设置一个名为newArray
的临时数组,复制this->images
中的所有值,删除this->images
,然后为{{1}分配新内存},从images
复制到newArray
,然后删除images
。
我使用Valgrind会遇到100,000多个错误,尽管代码确实编译了。具体来说,我不认为Valgrind喜欢newArray
答案 0 :(得分:2)
你肯定有内存泄漏:
newArray[i]=new Image;
if(images[i] !=NULL) {
// ...
}
else {
newArray[i]=NULL;
}
为什么要创建两个新阵列?您只需要创建一个新数组,将旧数组的内容复制到新数组中,销毁旧数组,然后指定images
指向新数组。
为什么要创建新的Image
个对象?由于您只是更改images
数组的大小,因此您只需将所有指针移动到新数组中,而无需创建任何新的Image
对象。
正如我在评论中所说,你绝对应该使用C ++标准库中的std::vector
或其他一些序列容器,例如std::vector<Image>
。要求很差,我强烈建议改变设计。
答案 1 :(得分:1)
这整段代码都是错误的,可以用正确的一行代替:
images=new Image*[newmax];
for (int i=0;i<newmax;i++){
if (newArray[i]!=NULL) {
images[i]=new Image;
*images[i]=*newArray[i];
}
else {
images[i]=NULL;
}
delete newArray[i];
}
delete [] newArray;
并且代码中没有出现类似于该行的内容。好吧,好吧,第一行模糊地相似,但只是含糊不清。