Gelöst: Exeption der Klasse EAccessViolation bei DELETE



  • Hi

    Ich habe in einem Programm ein Problem

    es Tritt folgender Fehler auf:
    Im Projekt SmartParser.exe ist eine Exeption der Klasse EAccessViolation aufgetreten.Medlung: 'Zugriffsverletzung bei Adresse 02000100. Lesen von Adresse 02000100'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortfahren.

    Das ganze passiert hier:

    Bedinung::clean()
    {
    
      if(cbSpalte != NULL) //Wollte testen ob da überhaupt was drinne ist!
      delete cbSpalte;     //Hier
      delete cbOperator;
      delete txtString;
      delete lblTitel;
      delete Panel;
    }
    

    Habe aber an der Methode schon länger nichts mehr geändert also recht komisch das da auf einmal ein Fehler auftritt!

    Hier wird die Methode aufgerufen:

    for(unsigned int i = 0; i < Form3->Gruppen.size(); i++)
      {
        delete Form3->Gruppen[i].lblTitel;
        delete Form3->Gruppen[i].cbTyp;
        delete Form3->Gruppen[i].Panel;
        for(unsigned int x = 0; x < Form3->Gruppen[i].Bedinungen.size(); x++)
        {
          Form3->Gruppen[i].Bedinungen[x].clean(); //Hier wird die Methode aufgerufen
        }
        Form3->Gruppen[i].Bedinungen.clear();
        Form3->Gruppen[i].Bedinungen.resize(0);
      }
    

    Hoffe mir kann da jemand helfen!

    THX

    Dagsta

    Lösung:

    Ich hatte bereits vorher das Parent gelöscht also war das alles schon nicht mehr da!



  • Hallo

    Das hatten wir doch schon mal.
    Du must bei einem delete auch sicherstellen, das dann noch eine gültige Instanz an gegeben ist. Die VCL-Controls löschen automatisch alle untergeordneten Controls (also die beim Ersrellen als Owner dieses Objekt zugewiesen bekommen haben).
    Eventuell hilft bereits ein Verschieben der deletes

    for(unsigned int i = 0; i < Form3->Gruppen.size(); i++)
      {
        for(unsigned int x = 0; x < Form3->Gruppen[i].Bedinungen.size(); x++)
        {
          Form3->Gruppen[i].Bedinungen[x].clean(); //Hier wird die Methode aufgerufen
        }
        Form3->Gruppen[i].Bedinungen.clear();
        Form3->Gruppen[i].Bedinungen.resize(0);
        delete Form3->Gruppen[i].lblTitel;
        delete Form3->Gruppen[i].cbTyp;
        delete Form3->Gruppen[i].Panel;
      }
    

    Ansonsten hilft dir nur Debuggen.

    /Edit : okay, du das also schon gefunden.

    bis bald
    akari


Anmelden zum Antworten