[英]Trouble with allocating new memory for array in C++
好吧,我很难理解自己在做什么。 在头文件中,我有一个指向图像指针数组的指针:
Image **images;
int maximum; //size
这是称为场景的类的一部分。 现在,场景具有一个名为changemax的成员函数,该函数会更改图像数组的大小。 您可以减少或增加。
因此,我要做的是设置一个名为newArray
的临时数组,从this->images
复制所有值,删除this->images
,然后为images
分配新的内存,从newArray
复制到images
,然后删除newArray
。
尽管代码确实可以编译,但Valgrind仍然有超过100,000个错误。 具体来说,我认为Valgrind不喜欢这样的说法,即images=new Image*[newmax];
您这里肯定有内存泄漏:
newArray[i]=new Image;
if(images[i] !=NULL) {
// ...
}
else {
newArray[i]=NULL;
}
为什么要创建两个新数组? 您只需要创建一个新阵列,将旧阵列的内容复制到新阵列中,销毁旧阵列,然后分配images
以指向新阵列。
为什么要创建新的Image
对象? 由于仅更改images
数组的大小,因此您可以简单地将所有指针移到新数组中,而无需创建任何新的Image
对象。
正如我在评论中所说,您绝对应该为此使用std::vector
或C ++标准库中的其他序列容器,例如std::vector<Image>
。 要求很差,我强烈建议您进行设计更改。
这整段代码完全是错误的,可以用正确的一行代替:
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;
甚至没有类似的行出现在代码中。 好吧,好吧,第一行大概是相似的,但是只是模糊而已。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.