1

for ループで作成した古いイメージを削除したい。

ボタンを初めてクリックすると、画像が作成されます。2 回目でも 3 回目でも、作成された古いイメージを (ループの前に) 削除し、ループで直接再作成する必要があります。

データベースからプロパティを取得しているためImage、誰かがデータベースで何かを変更したときに、データベースから最新の画像プロパティを取得できるようにする必要があります。

delete Image[i]free()and (配列全体)で試しましたが、delete[]常にAccess Violation Errorが発生します。ここに私の次のコードがあります:

TImage *Image[c]= ; //c is 5

ここで古い画像を削除してから、以下のループで新しい画像を作成したい

for (int i = 0; i < c; i++) 
{
str = " Test "

Image[i] = new TImage(this);  
Image[i]->Parent = BoardItem ;  
Image[i]->Height = 20 ;  
Image[i]->Width = 20 ;   
Image[i]->Position->X = d ;  // The program asks you the coordinate at the begining of a new loop
Image[i]->Position->Y = e ; 
Image[i]->Bitmap = Icon->Bitmap ;  
Image[i]->StyleName = str ;     
Image[i]->OnClick = ImageClick ;   
}
4

3 に答える 3

1

delete次のような単純な演算子で単一の画像を削除する必要があります。

for (int i = 0; i < c; i++)
{
    delete Image[i];
    // NULL deleted pointer
    Image[i] = NULL;
}

コードのどこかでこのイメージをまだ使用しているため、アクセス違反も発生する可能性があります。そして、なぜこの画像を削除したいのですか? それらはポインタであるため、単純に値を更新できます。

予測できない量のポインターの値を予約するには、TImage*次を使用できます。

TImage** ppImage= NULL;

必要な量のポインターを作成するよりも:

ppImage = new TImage*[c];

その後、以前と同じようにこれらのポインターを操作できます。

于 2016-01-10T12:45:19.880 に答える