Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben
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.
Geschrieben

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

Geschrieben
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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...