gpt4 book ai didi

C++ 删除指针数组 - 双重释放或损坏

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:29 26 4
gpt4 key购买 nike

这只是一个了解继承如何工作的测试项目。 Cat 是 Mammal 的一个子类,而 Mammal 又是 Animal 的一个子类。

int main()
{
Cat* cat1 = new Cat("nosy grey", 1.0d, 3);
Cat* cat2 = new Cat("purply green", 2.0d, 4);

Cat* cats[] = {cat1, cat2};

delete [] cats;
}

所以我真的不能那样做,因为那时我明白了。

*** Error in `/home/max/git/info-2-ss/Blatt3/Aufgabe2/main.exe': double free or corruption (out): 0x00007fff55fd7b10 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x80a46)[0x7f3a07452a46]
/home/max/git/info-2-ss/Blatt3/Aufgabe2/main.exe[0x40178e]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7f3a073f3ea5]
/home/max/git/info-2-ss/Blatt3/Aufgabe2/main.exe[0x400d39]

我在构造函数和析构函数被调用时输出,所以当我的 Cats 创建时,我得到如下内容:

Called ctor of Animal with age: 3
Called ctor of Mammal with hairLength: 1
Called ctor of Cat with eyecolor: nosy grey

当我稍微更改我的代码时,它显示为:

delete [] *cats;

然后我会期望我的 dtors 会像这样为每只猫调用:

Called dtor of Cat
Called dtor of Mammal
Called dtor of Animal

相反,我得到了这一行:

Called dtor of Cat

总结:我怎样才能有效地删除我的数组,以便调用我的所有 dtor?

最佳答案

这个

Cat* cats[] = {cat1, cat2};

创建一个指向具有自动存储功能的猫的指针数组!您没有使用 new[] 分配数组,因此您不应该使用 delete[] 释放它。

关于C++ 删除指针数组 - 双重释放或损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16587126/

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