AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein FastMM Memory Error Detected beim Debuggen
Thema durchsuchen
Ansicht
Themen-Optionen

FastMM Memory Error Detected beim Debuggen

Ein Thema von TiGü · begonnen am 8. Aug 2012 · letzter Beitrag vom 13. Aug 2012
Antwort Antwort
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#1

AW: FastMM Memory Error Detected beim Debuggen

  Alt 9. Aug 2012, 12:51
Zitat:
An attempt has been made to free/reallocate a block that was allocated through a different FastMM instance. Check your memory manager sharing settings.
Irgendwas is da doppelt bei Dir, z.B. verschiedene FastMM-DLL in den Verzeichnissen, oder Du verwendest selber DLLs etc.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.564 Beiträge
 
Delphi 12 Athens
 
#2

AW: FastMM Memory Error Detected beim Debuggen

  Alt 9. Aug 2012, 12:57
Es kann auch sein, daß unter den zwei betroffenen Modulen (EXE und/oder DLLs) das sharing für FastMM nicht aktiv ist,
aber dennoch Speicher (Strings, Objekte usw.) übergeben werden und der andere FastMM dann versucht das freizugeben, was ihm garnicht gehört.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: FastMM Memory Error Detected beim Debuggen

  Alt 9. Aug 2012, 15:00
Es handelt sich um eine Anwendung, die ein Formular aus einer DLL öffnet/kreiert.
Natürlich werden dafür auch mehrere Informationen weitergereicht.

Jedoch tritt der Fehler auch bei String-Propertys der Formular-Komponenten auf (TComboBox etc.).

Im Verzeichnis wo betreffende EXE und DLL liegen, sind nur die FastMM_FullDebugMode.dll und sein 64-Bit Bruder kopiert.
Im Windows/System32 liegt keine FastMM-DLL.

Muss ich noch irgendetwas besonderes einstellen?
In beiden Projekten (gehören auch zu einer Projektgruppe) ist FastMM auf gleicher Weise aktivert.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.564 Beiträge
 
Delphi 12 Athens
 
#4

AW: FastMM Memory Error Detected beim Debuggen

  Alt 9. Aug 2012, 17:10
Das heißt du erstellst in der DLL eine Form-Instanz und gibst diese dann an die EXE weiter?

Sowas macht man nicht,
denn EXE und DLL haben (standardmäßig) nicht nur unabhängige Speichermanager (abgesehn von ShareMem und Co.), sondern auch, und vorallem das, getrennte/eigenständige RTTIs.

Die andere Variante wären Laufzeitpackages, bei welchen auch die RTTI mit gemeinsam verwendet wird.



Du kannst ein Interface in der DLL bereitstellen, welches für die Kontrolle der Form zuständig ist, aber Objekte sollten tunlichst nicht die DLL/EXE-Grenze überschreiten.
Und auch sowas wie Strings (ausgeschlossen ShortString, WideString, PChar und statische Char-Arrays) sollten ohne Shared Memory nicht diese Grenze überschreiten.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: FastMM Memory Error Detected beim Debuggen

  Alt 10. Aug 2012, 13:28
Das heißt du erstellst in der DLL eine Form-Instanz und gibst diese dann an die EXE weiter?
Nein, sowas natürlich nicht!
Ich mache es richtig und übergebe der DLL ein PAnsiChar.

Zur besseren Veranschaulichung habe ich eine Beispielprojektgruppe mit Delphi 2009 erstellt.
Im angehängten ZIP bitte die Projektgruppe öffnen.
Es ist ein Programm nebst DLL.

In den Projekt-Einstellungen beider Projekte die Werte für Output directory, Working directory, Host application und Unit output directory entsprechend eurer Konfiguration anpassen.
Ich arbeite hier mit Umgebungsvariablen.

Auch müsst ihr ggf. den Ort der FastMM4.pas anpassen, der wird bei mir über die Tools->Options->Delphi Options-> Library - Win32 vererbt.
Die entsprechenden FastMM4-DLLs nicht vergessen.

DLL als Startprojekt:
In der DLL den Breakpoint nach der Stelle setzen, wo die DLL-Frm den neuen Caption-String erhält (DLLMain - Zeile 22).
Sobald das Programm hier anhält, bitte die Maus über die Property Caption von DLLFrm.lbl1.Caption halten.
Normalerweise erscheint dann dort dann der entsprechende String, mit FastMM4 eine Fehlermeldung (siehe Screenshot im Anhang).

Merkwürdigerweise kann man einen Debug-Hint erhalten, wenn man auf lbl1 geht und dort über TControl nach FText sucht.
Hier steht's dann richtig drin.

Es ist irgendwie so, als ob FastMM4 nicht mit GetText von der Caption-Property zurecht kommt.

Kann jemand mein Problem nachvollziehen?
Angehängte Grafiken
Dateityp: png FehlermeldungFastMM4.png (82,6 KB, 17x aufgerufen)
Angehängte Dateien
Dateityp: zip TestProgram.zip (6,1 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#6

AW: FastMM Memory Error Detected beim Debuggen

  Alt 10. Aug 2012, 13:34
Benutzen den Delphi und deine Anwendung die gleiche FastMM-Instanz?
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: FastMM Memory Error Detected beim Debuggen

  Alt 10. Aug 2012, 13:41
Benutzen den Delphi und deine Anwendung die gleiche FastMM-Instanz?
Meinst du das:

EXE und DLL greifen auf die gleiche FastMM4.pas/-.dcu zu und auch natürlich auf die gleiche FastMM_FullDebugMode.dll (EXE und DLL liegen auch im gleichen Verzeichnis).
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz