0

関数cAuthorisationの配列を管理するクラスがあり、次のレコードの準備をします。strAuthorisationresize

の間 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[]null ポインターは安全 (操作なし) であるためdata、コンストラクターで初期化します。

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

現状のクラスは 3 のルールに違反していることに注意してください。

これが学習演習であるかどうかは不明です。使用されていない場合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 に答える