Entwickler-Ecke
Sonstiges (Delphi) - Speicherproblemfrage
Sephiroth - Mo 25.11.02 10:29
Titel: Speicherproblemfrage
Hallo Leute,
ich hab ein Programm das inzwischen über 11 MB groß ist (ausserdem läd dieses Programm 3 DLLs die rund 10 MB groß sind)
Jetzt hatte ich grad ein Problem: Ich hab einen weiteren dynamischen Array eingefügt und jetzt bricht das Programm plötzlich an einer vollkommen missverständlichen stelle ab, die beim Start einen völlig anderen dynamischen Array mit dem Befehl SetLength eine Größe zuweisst. Wenn ich den Array ausklammer läuft das Programm ohne Probleme.
Ich benutzte Win 2000. Kann es sein das die Exe eine bestimmte Größe nicht überschreiten darf? Oder hat sonst irgendjemand eine Idee woran dieser Fehler liegen kann?
Nachtrag: Ich habs jetzt mal mit einem statischen Array statt eines dynamischen getestet. Es gab keine Problem selbst wenn ich einen Array [1..10000000] erstellt hab. Kann es dann sein das er ab einer bestimmten Anzahl von dynamischen Arrays Probleme bekommt? Oder vielleicht das zwei Arrays auf gleiche Speicherplätze zurückgreifen wollen und dadurch Probleme entstehen?
Klabautermann - Mo 25.11.02 10:38
Hallo,
wie lautet denn die Fehlermeldung? Oder gibt es garkeine?
Wie währe es mit ein wenig code dammit wir uns ein Bild machen können?
Gruß
Klabautermann
Sephiroth - Mo 25.11.02 10:52
Fehler lautet:
| Zitat: |
| Zugriffsverletztung bei Adresse .... in Modul 'MyProgramm.exe'. Lesen von Adresse .... |
Wenn ich dann mit "Ok" bestätige bekomm ich noch so ne lustige Fehlermeldung:
| Zitat: |
| "Die Anweisung in "....." verweist auf Speicher in "....". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden" |
Dann hab ich die Auswahl zwischen Ok und Abbrechen. Das ist eine ganz normale Speicherverletzung. Aber wieso tritt die auf?
Also hier noch ein paar Daten:
Ich hab ca. 15 dynamische Arrays im Programm und ca. 50 statische. Der Array den ich ausklammern muss damit der Fehler nicht auftritt lautet:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| aryAlarmAnzeige : Array of recAlarme;
type recAlarme = record dateZeitpunkt : TDateTime; intID : Integer; blnAnzeigen : Boolean; end; |
Ich hab allerdings bereits 2 weitere dynamische Arrays die aryAlarmAnzeige gleichen nur das halt der Bezeichner anders ist.
Der Array der dann plötzlich bei Start probleme macht heißt:
Quelltext
1:
| aryDummy : Array of Integer; |
Und bekommt mit
Quelltext
1:
| Setlength(aryDummy,intAnzahl); |
eine Größe zugewiesen. In diesem Fall hat intAnzahl = 3
Wie bereits oben erwähnt ist das interessante das wenn ich aryAlarmAnzeige als statischen Array deklariere der Fehler nicht auftritt.
Irgendwelche Ideen? Noch Fragen?
Udontknow - Mo 25.11.02 16:28
Hi!
Vielleicht hilft das ja:
Zitat aus der Delphi-Hilfe
| Zitat: |
Der Shared-Memory-Manager (nur Windows)
Wenn eine DLL unter Windows Routinen exportiert, die lange Strings oder dynamische Arrays als Parameter oder als Funktionsergebnis übergeben (entweder direkt oder in Records bzw. Objekten), müssen die DLL und ihre Client-Anwendungen (oder DLLs) die Unit ShareMem verwenden...
|
Cu,
Udontknow
Sephiroth - Mo 25.11.02 17:58
Vielen Dank für deine Hilfe aber das ist nicht das Problem... Ich arbeite immer mit der Unit ShareMem und der Fehler tritt auch nicht im Bezug auf die DLLs auf....
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!