繁体   English   中英

在C ++中为数组分配新内存的麻烦

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM