AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Parameter/Stack-Limit

Ein Thema von ledil · begonnen am 26. Apr 2007 · letzter Beitrag vom 26. Apr 2007
Antwort Antwort
ledil

Registriert seit: 20. Jul 2006
6 Beiträge
 
#1

Parameter/Stack-Limit

  Alt 26. Apr 2007, 01:00
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.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Parameter/Stack-Limit

  Alt 26. Apr 2007, 01:06
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?
  Mit Zitat antworten Zitat
ledil

Registriert seit: 20. Jul 2006
6 Beiträge
 
#3

Re: Parameter/Stack-Limit

  Alt 26. Apr 2007, 01:25
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Parameter/Stack-Limit

  Alt 26. Apr 2007, 01:33
ja, Kopien der Zeiger!
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ledil

Registriert seit: 20. Jul 2006
6 Beiträge
 
#5

Re: Parameter/Stack-Limit

  Alt 26. Apr 2007, 01:35
Zitat von Luckie:
ja, Kopien der Zeiger!
Ja und nu ? :)
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#6

Re: Parameter/Stack-Limit

  Alt 26. Apr 2007, 02:24
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.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: Parameter/Stack-Limit

  Alt 26. Apr 2007, 03:20
Zitat von ledil:
Zitat von Luckie:
ja, Kopien der Zeiger!
Ja und nu ?
Zeige mal, wo und wann die 5 Stringlisten erzeugt werden. Schätze mal : nirgends.
Gruß
Hansa
  Mit Zitat antworten Zitat
ledil

Registriert seit: 20. Jul 2006
6 Beiträge
 
#8

Re: Parameter/Stack-Limit

  Alt 26. Apr 2007, 09:24
Zitat von Hansa:
Zitat von ledil:
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 :(
  Mit Zitat antworten Zitat
26. Apr 2007, 09:31
Dieses Thema wurde von "sakura" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
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 03:07 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