[BCB] Problem ze zwalnianiem zaalokowanej pamięci

0

Witam
Dlaczego podczas zamykania programu zostaje rzucony wyjątek EAccessViolation.
builder wskazuje na 4 linijkę w "destruktorze" FormDestroy - delete[] Najlepsze_wynikiTrasa[i];.
Teoretycznie wszystko jest jak należy. A może ta pamięć jest już zwolniona ;?

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) //konstruktor
        : TForm(Owner)
{

	Najlepsze_wyniki = new double[Ilosc_powtorzen];
    Najlepsze_wynikiTrasa  = new int* [Ilosc_powtorzen];
    for (int i = 0; i < Ilosc_powtorzen; i++)
			Najlepsze_wynikiTrasa[i] = new int[Ile_miast];

	Wynik = new double[Ile_wynikow];
	WynikTrasa = new int* [Ile_wynikow];
	for (int i = 0; i < Ile_miast; i++)
			WynikTrasa[i] = new int[Ile_miast];
	Liczba_wynikow = Ile_wynikow;
	Liczba_najlepszych = Ilosc_powtorzen;
	Index_najlepszych = 0;
	Index_wyniku = 0;
	najlepszaTrasa = new int[Ile_miast];
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender) // "destruktor"
{
 
    delete[] Najlepsze_wyniki;

    for (int i = 0; i < Ilosc_powtorzen; i++) 
        delete[] Najlepsze_wynikiTrasa[i]; // EAccessViolation - ???? DLACZEGO ???

    delete[] Najlepsze_wynikiTrasa;

    delete[] Wynik;

    for (int i = 0; i < Ile_wynikow; i++)
        delete[] WynikTrasa[i]; // EAccessViolation - ???? DLACZEGO ???

    delete[] WynikTrasa;

    delete[] najlepszaTrasa;
}
//---------------------------------------------------------------------------
0

A próbowałeś ten kod wstawić do destruktora klasy TForm1???

0

tak - i dalej to samo !

0

Ten fragment kodu kompiluje się poprawnie i nie powoduje błędu.
Może błąd jest w tym kawałku którego nie przedstawiłeś ;-) .

Zrób nowy projekt i przekompiluj ten kod , jak zadziała to błąd jest gdzie indziej:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

double*Najlepsze_wyniki ;
int**Najlepsze_wynikiTrasa ;
double*Wynik;
int**WynikTrasa ;
int*najlepszaTrasa ;

int Ilosc_powtorzen = 2 ;
int Ile_wynikow = 10 ;
int Ile_miast = 5 ;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
        Najlepsze_wyniki = new double[Ilosc_powtorzen];
    Najlepsze_wynikiTrasa  = new int* [Ilosc_powtorzen];
    for (int i = 0; i < Ilosc_powtorzen; i++)
                        Najlepsze_wynikiTrasa[i] = new int[Ile_miast];

        Wynik = new double[Ile_wynikow];
        WynikTrasa = new int* [Ile_wynikow];
        for (int i = 0; i < Ile_miast; i++)
                        WynikTrasa[i] = new int[Ile_miast];

      //  Liczba_wynikow = Ile_wynikow;
      //  Liczba_najlepszych = Ilosc_powtorzen;
      //  Index_najlepszych = 0;
      //  Index_wyniku = 0;
        najlepszaTrasa = new int[Ile_miast];
}
//--------------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
    delete[] Najlepsze_wyniki;

    for (int i = 0; i < Ilosc_powtorzen; i++)
        delete[] Najlepsze_wynikiTrasa[i]; // EAccessViolation - ???? DLACZEGO ???

    delete[] Najlepsze_wynikiTrasa;

    delete[] Wynik;

    for (int i = 0; i < Ile_wynikow; i++)
        delete[] WynikTrasa[i]; // EAccessViolation - ???? DLACZEGO ???

    delete[] WynikTrasa;

    delete[] najlepszaTrasa;
}
//---------------------------------------------------------------------------
0

koda się kompiluje. błąd jest w innym kawałku programu. Dzięki za wskzówki :-) !

1 użytkowników online, w tym zalogowanych: 0, gości: 1