Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Parameter/Stack-Limit (https://www.delphipraxis.net/90911-parameter-stack-limit.html)

ledil 26. Apr 2007 00:00


Parameter/Stack-Limit
 
Hallo,

gibt es ein Limit fürParameter ? Ich frage deshalb weil ich eine Funktion habe, der ich 5 TStringList übergebe, e.g: function foo(a,b,c,d,e:TStringList) ... Nun hab ich bemerkt, dass wenn meine TStringLists (oder nur einige) gross sind, eine Variable e.g. "b" oder "c" manchmal total kaputt ist. Es scheint so, als ob der Stack dann kaputt ist. Ich spekulieren, dass der Stack überfüllt wird. Nun meine Frage, gibt es so ein Limit und wenn ja, was passiert wenn ich als Parameter ein TMEmoryStream übergebe was ca. 10 MB an Daten hat ? Kann ich sowas ueberhaupt als Parameter mitgeben ?

Danke.

Muetze1 26. Apr 2007 00:06

Re: Parameter/Stack-Limit
 
Da es Instanzen sind, werden nur Zeiger auf die Listen übergeben. Der Stack ist somit nicht überfüllt und der Heap (wo die Instanzen liegen) sollte dabei auch noch nicht voll sein. Grundlegend würde ich bei deiner Fehlerbeschreibung eher vermuten, dass die Stringlisten anderweitig wieder freigegeben wurde und nicht mehr existieren oder du mit Zeigern falsch hantierst bzw. Bereichsfehler hast. Hast du schonmal die Bereichsprüfung in den Projektoptionen->Compiler aktiviert und das Projekt danach komplett neu erstellt und gestartet? Kamen dort Hinweise?

ledil 26. Apr 2007 00:25

Re: Parameter/Stack-Limit
 
Zitat:

Zitat von Muetze1
Da es Instanzen sind, werden nur Zeiger auf die Listen übergeben. Der Stack ist somit nicht überfüllt und der Heap (wo die Instanzen liegen) sollte dabei auch noch nicht voll sein. Grundlegend würde ich bei deiner Fehlerbeschreibung eher vermuten, dass die Stringlisten anderweitig wieder freigegeben wurde und nicht mehr existieren oder du mit Zeigern falsch hantierst bzw. Bereichsfehler hast. Hast du schonmal die Bereichsprüfung in den Projektoptionen->Compiler aktiviert und das Projekt danach komplett neu erstellt und gestartet? Kamen dort Hinweise?

Ja, hab ich gemacht. Keine Hinweise! Das Problem was ich hab ist, dass die Variable z.B. "b" vor der Funktion die richtigen Werte enthaellt und wenn ich nach dem Eintritt der Funktion nochmal auf die Variable gucke, dann ist die Variable kaputt ... Hier meine Funktionen:

function foo2(a,b,c,d,e:TStringList):HRESULT;
begin
...
end;

function foo(a,b,c,d,e:TStringlist):HRESULT;
begin
// breakpoint ( hier ist "b" richtig ....)
result:=foo2(a,b,c,d,e,blabla); // in der Funktion foo2 ist "b" kaputt ...
end;

Somit werden die TStringlists zweimal weitergeben, aber ich hab nirgends "var" stehen, daher sollte er ja immer nur kopien übertragen.

Luckie 26. Apr 2007 00:33

Re: Parameter/Stack-Limit
 
ja, Kopien der Zeiger!

ledil 26. Apr 2007 00:35

Re: Parameter/Stack-Limit
 
Zitat:

Zitat von Luckie
ja, Kopien der Zeiger!

Ja und nu ? :)

Nuclear-Ping 26. Apr 2007 01:24

Re: Parameter/Stack-Limit
 
Was machst du denn in foo2?

Wenn du Kopien der Zeiger übergibst, übergibst du im Prinzip den Zeiger selber. ^^ Das heisst, dass Änderungen an einer StringList in foo2 sich genauso auf die ganze StringList auswirkt, als wenn du die Änderung direkt vornimmst.

Wenn du willst, dass Änderungen in foo2 sich nicht auf den Rest auswirken, musst du eine neue StringList erzeugen, die Daten da reinschieben (z.B. mit .Assign) und die neue StringList dann an foo2 übergeben.

Hansa 26. Apr 2007 02:20

Re: Parameter/Stack-Limit
 
Zitat:

Zitat von ledil
Zitat:

Zitat von Luckie
ja, Kopien der Zeiger!

Ja und nu ? :)

Zeige mal, wo und wann die 5 Stringlisten erzeugt werden. Schätze mal : nirgends. :mrgreen:

ledil 26. Apr 2007 08:24

Re: Parameter/Stack-Limit
 
Zitat:

Zitat von Hansa
Zitat:

Zitat von ledil
Zitat:

Zitat von Luckie
ja, Kopien der Zeiger!

Ja und nu ? :)

Zeige mal, wo und wann die 5 Stringlisten erzeugt werden. Schätze mal : nirgends. :mrgreen:

Doch, doch ich erstelle die! Aber irgendwie macht der mir in foo2 immer eine tstringlist variable kaputt :(

DP-Maintenance 26. Apr 2007 08:31

DP-Maintenance
 
Dieses Thema wurde von "sakura" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz