Autor Beitrag
Sephiroth
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: Mo 25.11.02 10:29 
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?


Zuletzt bearbeitet von Sephiroth am Mo 25.11.02 10:39, insgesamt 1-mal bearbeitet
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: 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:
ausblenden 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:
ausblenden Quelltext
1:
  aryDummy       : Array of Integer;					

Und bekommt mit
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: 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....