Zugriffsverletzung beim Schließen...
-
Hi! Ich brauche mal die Hilfe von den Profis unter euch

Ich erhalte beim schließen meines Programmes immer die Meldung "Zugriffsverletzung bei Adresse [...] in Modul 'BORLNDMM.dll'. Schreiben von Adresse[...]"
Ich kann damit leider nicht viel anfangen...
worauf deutet dieser Fehler hin? Muss ja was mit den Zeigern zu tun haben oder?Wie kann ich den Debugger hier geschickt verwenden um den Fehler zu finden...
Hier mal ein kleiner Ausschnitt von meinem Programm
//--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "CGAUGES" #pragma resource "*.dfm" TForm1 *Form1; bool *color; TStringList *adds; TStringList *searchwords; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { adds = new TStringList; searchwords = new TStringList; color = new bool(adds->Count); <-- soll so groß werden wie adds, adds wird natürlich vorher gefüllt } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { delete searchwords; delete adds; delete color; } //---------------------------------------------------------------------------So ganz kurz und knapp das wo ich mir vorstellen könnte das der Fehler liegt...
Muss jetzt halt wissen wie ich vorgehen kann um den Fehler zu finden...
Kann es vll sein das ich möglichst schnell den dynamischen Speicher wieder löschen muss??
Schonmal vielen vielen Dank für die Antworten!!!!!!!

-
Hallo,
Hier gibt es gleich mehrere Fehler bzw. Probleme.
1. Du solltest deine Variablen zu Member deiner Formklasse machen (möglichst private)
2. Das Gegenstück zu OnCreate heißt OnDestroy und nicht OnClose. Letzendlich ist aber auch OnCreate/OnDestroy ungünstig. Am Besten holt man den Speicher im Konstruktor und gibt ihm im Destruktor (mußt du selber schreiben) wieder frei.
3. Das hiercolor = new bool(adds->Count);ist falsch. Hiermit erzeugst du einen Pointer auf ein bool und nicht auf ein bool-Array. Das geht dann so
color = new bool[adds->Count];In diesem Fall muß das delete dann aber so aussehen
delete[] color;
-
Hallo
Und wenn du jetzt noch statt dem C-Array ein std::vector<bool> nimmst kannst du dir die manuelle Speicherverwaltung ganz sparen.
Und für adds, searchwords kannst du auch std::vector<AnsiString> benutzen, wenn du nicht spezielle TStringList-Funktionen brauchst.bis bald
akari
-
Wenn er doch aber C-Arrays und Pointer lernen will.
