Seite 2 von 2

Verfasst: 16.12.2004 08:05
von Danilo
Lars hat geschrieben:Was hier wichtig ist: Die Variable result ist hier die variable einer Procedur
und wird damit im Prinzip nach beenden der Procedur gelöscht. Direkt
nach Beenden kannst du noch darauf zugreifen, wenn du aber da mal ein
Delay(2000) zwischen Procedure Call und Debug einsetzt, siehst du, dass
die Variable schon gelöscht wurde.
Das ist absolut nicht sicher und auch nicht korrekt.

Wenn Du die Struktur zurückgeben willst, dann mußt Du
dafür extra Speicher reservieren. Also in der Prozedur
ein AllocateMemory( sizeof(Struktur) ). Struktur über
Pointer füllen und Diesen zurückgeben.
Wenn im Hauptprogramm nicht mehr gebraucht, dann mit
FreeMemory wieder freigeben.

Mit den lokalen Variablen kannst Du außerhalb der Prozedur
nicht mehr offiziell rechnen, auch wenn es bei Dir im Moment
durch testen geht.

Verfasst: 16.12.2004 22:48
von Lars
Danilo hat geschrieben:Das ist absolut nicht sicher und auch nicht korrekt.
Dass das nicht die feine englische Art ist, ist mir im Grunde klar und du
hast natürlich Recht, wenn du mit Blick darauf, dass man sauber
programmiert, davon abrätst. Funktionieren tut es trotzdem und darauf
wollte ich hinweisen :wink:

Re: Mehrere Rückgabewerte von Procedur

Verfasst: 18.12.2004 01:35
von Kaeru Gaman
mal ne dumme frage:

wo ist der effektive unterschied, zwischen

1)
einer pointer-übergabe oder
allociertem speicher

und
2)
nutzung von Globals?

Maurizio555 hat geschrieben:... und man vermeidet Global-Variabeln (man sollte so wenig davon benutzen wie nur möglich).
das ist doch ein dogma.

gibt es dafür auch argumente?

Re: Mehrere Rückgabewerte von Procedur

Verfasst: 18.12.2004 16:55
von NetSlayer
Kaeru Gaman hat geschrieben:wo ist der effektive unterschied, zwischen

1)
einer pointer-übergabe oder
allociertem speicher

und
2)
nutzung von Globals?
Ich benutze ersteres um einer DLL Daten zu übergeben. Die interessiert es nämlich herzlich wenig, ob ich irgendwas global deklariere...

Verfasst: 19.12.2004 08:07
von Kaeru Gaman
bei ner DLL ein argument, aber nicht für interne procedures.