Kampfkartoffel Geschrieben 28. Juli 2006 Teilen Geschrieben 28. Juli 2006 Hallo an Alle, ich habe in einer Unterfunktion, also einer Funktion, die von einer anderen aufgerufen wird ein Array mit new erzeugt. Als ich dann am Ende der Unterfunktion das Array mit delete wieder löschen wollte, hat er mir einen dicken Fehler ausgegeben. Ließ ich dieses delete weg hat er sauber kompiliert und das Programm auch einwandfrei ausgeführt. Was ich komisch finde ist, dass wenn ich das delete des dynamischen Arrays, welches ich in der Funktion, die die Unterfunktion aufruft, weglasse, dann beendet er das Programm nicht sauber. Der Debugger bleibt wieterhin aktiv. Ich habe also in einer Funktion und in der Unterfunktion je ein dynamisches Array erzeugt und darf nur das Array der "Über"Funktion deleten. Das kommt mir irgendwie spanisch vor, denn es steht doch überall, dass man "new" erzeugte Variablen oder Felder auch wieder "deleten" muss. Kann das irgendjemand erklären? PS: Es geht mir nur erstmal darum, zu erfahren, ob und wenn ja, warum das möglich ist. Sollte es nicht möglich oder falsch programmiert sein (wovon ich ausgehe), werde ich Code posten Gruß KK Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 28. Juli 2006 Teilen Geschrieben 28. Juli 2006 Als ich dann am Ende der Unterfunktion das Array mit delete wieder löschen wollte, hat er mir einen dicken Fehler ausgegeben. Bekommst du wirklich eine MessageBox mit dem Text "dicker Fehler"? Ließ ich dieses delete weg hat er sauber kompiliert und das Programm auch einwandfrei ausgeführt.Naja, da wird wohl ein Speicherleck drin sein. Nicht gerade das, was ich "einwandfrei" nennen würde. Kann das irgendjemand erklären?Das riecht nach einer Bereichsüberschreitung. Vermutlich schreibst du über die Grenzen des Arrays hinweg in den Speicher. Der genaue Wortlaut der Fehlermeldung wäre hier (wie immer) hilfreich gewesen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kampfkartoffel Geschrieben 28. Juli 2006 Autor Teilen Geschrieben 28. Juli 2006 Hallo Klotzkopp, Der genaue Wortlaut der Fehlermeldung wäre hier (wie immer) hilfreich gewesen. Das ist ja kein Problem: "Debug Error ... DAMAGE: after Normalblock(#57207) at 0x01800040" Hier noch ein bisschen Code: long *VirtNodeFeld= new long [Feldindex]; if((VirtNodeFeld)) { for(int i=0; i<Feldindex; i++) VirtNodeFeld[i]=0; //Nullen des Feldes Feld_laden(VirtNodeFeld); // Wird an das Programm übergeben ... delete []VirtNodeFeld; } Zur Erläuterung: das Feld VirtNodeFeld wird über eine for-schleife die deutlich kleiner ist als Feldindex teilweise bestückt. Und das Feld wird auch nur bis Feldindex angesprochen. Gruß KK Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 28. Juli 2006 Teilen Geschrieben 28. Juli 2006 DAMAGE: after Normalblock(#57207) at 0x01800040"Bereichsüberschreitung, entweder in Feld_laden oder in dem "..."-Teil. Und das Feld wird auch nur bis Feldindex angesprochen.Vorsicht. "bis Feldindex" ist eins zu weit. Der letzte erlaubte Index ist Feldindex - 1. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kampfkartoffel Geschrieben 28. Juli 2006 Autor Teilen Geschrieben 28. Juli 2006 Danke Klotzkopp, dann werde ich mir noch mal den Feld_laden -Teil angucken, dort scheint der Fehler zu sein. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.