Prgramm bringt Fehler im Releas-Modus
-
Hallo,
also ich habe eine DLL erstellt die eine Klasse enthällt für verschiedene Funktionen.
Im Debug funktioniert alles einwandfrei.
Wenn ich jedoch die DLL im Releas Compiliere und die Option -dynamische RTL verwenden- abschalte bringt mein Programm das die DLL benutzt beim Beenden eine Fehlermeldung mit einer Speicherschutzverletzung aber nur wenn ich die Option abschalte.
Hat einer eine Idee woran das liegen kann.Wäre für Eure Hilfe sehr dankbar.
-
Hallo
Das liegt vermutlich an der Anwendung von delete auf einen uninitialisierten Zeiger. Denn im Debug-Modus werden normalerweise alle PODs (wie int und Zeiger) auf 0 gesetzt, und damit ist ein delete in Ordnung. Wenn dann aber im Release-Modus keine Standard-Initialisierung auf 0 erfolgt (und du auch im Nachhinein keinen gültigen Speicherbereich zuweist), besitzt der Zeiger dann eine ganz willkürliche, wilde Adresse. Und die verursacht im delete dann den Fehler.
bis bald
akari
-
Das hört sich Einleuchtend an. Ich erstelle in einer Funktion ein Array einer Structur.
struct Daten { ... .... };
in der Klasse:
Daten *Data;
Data = new Daten[ anzahl wird über eine Funktion ermittelt];
und beim beenden wird es wieder gelöscht.
-
Initialisiere Data mit 0 und alles ist Ok.
-
Klappt leider nicht????????
Kann es daran liegen das dies in einer DLL ist aber normal nicht oder?
-
Jetzt musst du uns schon ein wenig mehr Code zeigen. Was exportiert deine dll denn?
-
Ich glaube das liegt nicht am Array ich werde noch bisle ausprobieren und mich dann melden.
-
Hallo,
also wenn ich die DLL nicht verwende und den Quelltext direkt ins Projekt übernehme funktioniert alles.
Ich denke das liegt an den AnsiStrings.
-
Also hab den Fehler gefunden.
Ich muste nur in einer Methode AnsiString durch char* ersetzen dann hat es funktioniert.
Danke nochmal.