Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rückgabewert einer Funktion: Delphi will mich reinlegen (https://www.delphipraxis.net/44864-rueckgabewert-einer-funktion-delphi-will-mich-reinlegen.html)

Flori 26. Apr 2005 02:23


Rückgabewert einer Funktion: Delphi will mich reinlegen
 
Hi,

ich bin völlig verzweifelt. Seit heute Mittag brüte ich über ein und dem selben Fehler in meinem Programm. Es scheint alle so insich logisch zu sein, dass mir einfach nicht auffällt was daran falsch sein soll. Abermillionen Tests führten mich letztlich zu der Beobachtung, dass, in völlig zufälligen Abständen der Rückgabewert meiner Funktion nicht dem entspricht, was dann letztendlich ankommt. Kapiert was ich meine? Hier mal zur veranschaulichung

Delphi-Quellcode:
function test(bla: integer):integer;
var hallo: integer;
begin
hallo := 1324;
result := hallo;
end;

procedure usw.
var blubb;
begin
blubb := test(48855);
end;
Manchmal passiert es, dass hallo und blubb nicht identisch sind. Dieses Beispiel ist jetzt frei aus der Luft gegriffen!! Wieso passiert das? Ich will mittlerweile einfach nur noch sterben, so ein Mist...
ARGH!!!!

Okay, puh, jetzt gehts wieder.

Mein Originalcode ist natürlich komplexer als das Beispiel, aber prinzipiell ist es gleich. Es handelt sich auch um Integer-Variablen.

Ist das Phänomen bekannt.... bin ich einfach nur zu dumm.... hilfe?

Danke schonmal

[edit=MrSpock]Kraftausdruck entfernt. Mfg, MrSpock[/edit]

toms 26. Apr 2005 03:59

Re: Rückgabewert einer Funktion: Delphi will mich verarschen
 
Hallo!

Tritt das Phänomen auch in deinem Testcode auf oder nur im Originalcode ?

Robert Marquardt 26. Apr 2005 05:15

Re: Rückgabewert einer Funktion: Delphi will mich verarschen
 
Äh, warum sollten hallo und blubb identisch sein? Der Uebergabeparameter heisst bla und wird nicht angefasst.

runger 26. Apr 2005 05:21

Re: Rückgabewert einer Funktion: Delphi will mich verarschen
 
Hallo,

wie stellst du denn fest was in "blubb" drin steht?
Mit dem Debugger? hast du die Optimierung eingeschaltet?
Zeig das Ergebnis einfach mit einem Label an:
Delphi-Quellcode:
label1.caption:=inttostr(blubb);
Du wirst sehen es funktioniert dann. Der Debugger verarscht dich hier!

Rainer

runger 26. Apr 2005 05:24

Re: Rückgabewert einer Funktion: Delphi will mich verarschen
 
Hallo Robert,

lies doch erstmal das Codebeispiel in Ruhe durch!

Zitat:

Äh, warum sollten hallo und blubb identisch sein? Der Uebergabeparameter heisst bla und wird nicht angefasst.
Was hat denn bla mit dem Rückgabewert zu tun? bla ist der Übergabewert für die Funktion. Der Rückgabewert wird mit result festgelegt.

Rainer

Robert Marquardt 26. Apr 2005 05:41

Re: Rückgabewert einer Funktion: Delphi will mich verarschen
 
Schalt mal die Optimierungen aus. Wahrscheinlich hat der Compiler hallo komplett entfernt.

SirThornberry 26. Apr 2005 06:30

Re: Rückgabewert einer Funktion: Delphi will mich verarschen
 
also in dem beispiel ist klar das "blubb" immer "1234" ist weil test immer "1234" zurückgibt.

Tonic1024 26. Apr 2005 07:35

Re: Rückgabewert einer Funktion: Delphi will mich reinlegen
 
Hi

Zitat:

Zitat von Flori
Manchmal passiert es, dass hallo und blubb nicht identisch sind.

@SirThornberry: Ich denke genau darin liegt sein Problem, nämlich dass er nicht 1234 heraus bekommt... Aber ich glaube ohne konkretes Beispiel (auch gerne gekürzt) kommt man da nicht weiter.

Wenn ich mal nicht weiter weiss feuere ich alle paar Zeilen ein Showmessage raus um nen groben überblick zu bekommen oder hau immer wo ein "Meilenstein" liegt eine Haltemarke rein. Ist ganz hilfreich, vor allem beim Entwickeln von DLLs.

MfG

Tonic

[Edit] Verwendest du vielleicht nen Memorymanager oder Pointer? Manager richtig eingetragen und Pointer auch richtig verlinkt?[/Edit]

alcaeus 26. Apr 2005 07:43

Re: Rückgabewert einer Funktion: Delphi will mich reinlegen
 
Hallo Flori,

ich habe deinen Code soeben in Delphi7 Ent getestet, und hallo wurde wirklich vom Optimizer rausgeworfen. Die Zahl wird direkt in Result geschrieben.
Noch was: wenn du sagst, dass hallo und blubb nicht identisch sind, welcher der beiden Werte ist richtig? Evtl. kannst du dir mal mit ShowMessage oder Delphi-Referenz durchsuchenOutputDebugString die Werte ins Log schreiben lassen, und machst den Haltepunkt erst nach dem Aufruf von Test rein. Evtl. hat ja auch nur der Debugger ein Problem.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 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-2025 by Thomas Breitkreuz