gpt4 book ai didi

C++ delete [] 对象导致崩溃

转载 作者:太空狗 更新时间:2023-10-29 19:43:24 39 4
gpt4 key购买 nike

我制作了一个动态对象数组。当我调用 delete[] 时,程序崩溃并停止响应。但它有奇怪的行为:调用所有析构函数并崩溃。看看这段代码和输出。所有数组的所有内存都已分配。

//main file
#include "myobject.h"

int size;
myObject *foo;

//some operations to estimate size

foo = new myObject[size];

//some operations with myObject

std::cout<<"size: "<<size<<"\n";
std::cout<<"Deleting object\n";

size=0;
delete [] foo;

下一个文件:

//myobject.h

class myObject
{
public:
int number;

Object1 ob1[64]
Object2 *ob2;

myObject(){ };
~myObject()
{
std::cout<<"delete "<<number<<"\n";

delete [] ob1;
delete [] ob2;
};
}

输出:

size: 11

Deleting object

delete 10

delete 9

delete 8

delete 7

delete 6

delete 5

delete 4

delete 3

delete 2

delete 1

delete 0

然后它崩溃并停止响应。

最佳答案

您只能对 new[] 返回的指针调用 delete[],并且您必须只执行一次。这同样适用于 deletenew

特别是,您不能delete[] obj1,因为它是一个内置数组,而不是指针,而obj2 仅当它指向分配的未释放内存时新[]

关于C++ delete [] 对象导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28459526/

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