![]() |
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. |
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?
|
Re: Parameter/Stack-Limit
Zitat:
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. |
Re: Parameter/Stack-Limit
ja, Kopien der Zeiger!
|
Re: Parameter/Stack-Limit
Zitat:
|
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. |
Re: Parameter/Stack-Limit
Zitat:
|
Re: Parameter/Stack-Limit
Zitat:
|
DP-Maintenance
Dieses Thema wurde von "sakura" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 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 by Thomas Breitkreuz