0

我有cAuthorisation管理strAuthorisation 函数数组的类,resize为下一条记录准备数组。

期间 resize,在线delete [] data;我崩溃了。

struct strAuthorisation 
{ 
double Amount; 
}Authorisation;

class cAuthorisation { 
public: 
    int size; 
    strAuthorisation *data; 
cAuthorisation ()
{
    size=0;
}

~cAuthorisation()
{

};

void Add(strAuthorisation )
{
    resize();
    data[size]=*value;
}

void resize() 
{
    strAuthorisation *a = new strAuthorisation[5];
    size_t newSize = size + 1 ;
    strAuthorisation *newArr = new strAuthorisation[newSize];
    memcpy( newArr, data, size * sizeof(strAuthorisation) );

    size = newSize;

    delete [] data;
    data = newArr;
}
} Authorisations;

为什么不能删除类数组?

4

3 回答 3

7

它崩溃是因为它data是一个未初始化的指针。delete[]在空指针上是安全的(无操作),所以data在构造函数中初始化:

cAuthorisation() : size(0), data(0) {}

请注意,当前的类违反了三规则

不确定这是否是一个学习练习,如果不是使用std::vector<strAuthorisation>. 将std::vector根据需要动态增长,并在超出范围时自动销毁。

于 2012-07-17T13:19:36.177 回答
4

您尚未初始化data指针。所以你正在做这样的事情:

Foo *data;
delete [] data;
于 2012-07-17T13:20:09.257 回答
0

“数据”是一个指针,其值从未被初始化。

于 2012-07-17T13:21:24.677 回答