![]() |
Funktion mit Repeat-Schleife erzeugt falsches Ergebnis
Es ist für mich wirklich ein Mysterium.
Ich poste jetzt mal eine Funktion, die etwas berechnen soll. Zuerst kam etwas falsches raus, deswegen habe ich Testdrucke mit Showmessage eingebaut und plötzlich kommt das richtige raus. Eigentlich dürfte der Befehl ShowMessage(); doch wohl kaum das Ergebnis beinflussen, aber seht selbst:
Delphi-Quellcode:
Ergebnis ohne ShowMessage: 4405795
function CalculateSerial: String;
var CalcString : String; i: Integer; edx: Integer; begin CalcString := 'Aimkill'; i:=1; Repeat edx := edx + ord(CalcString[i]); //Showmessage(CalcString[i]+' -- '+ IntToStr(ord(CalcString[i]))); i:=i+2; Until i > Length(CalcString); result:=IntToStr(edx); end; Ergebnis mit Showmessage: 387 Das Ergebnis mit ShowMessage stimmt. Ich hab nachgerechnet. Nun bin ich gespannt was ihr dazu sagt. |
Re: Funktion mit Repeat-Schleife erzeugt falsches Ergebnis
Eventuell wird durch das ShowMessage der Speicher anderst organisiert. Ich nehme mal an, dass ohne ShowMessage im Speicher Mist steht, weil da was nicht stimmt bzw. du unsauber mit dem Speicher umgehst. Dein ShowMessage biegt es aber wieder ungewollt hin. Oder was auch sein kann: Ohne dein ShowMessage optimiert der Compiler da was weg, weil die Werte nicht benutzt werden oder so. Gibt der Compiler ohne ShowMessage irgendwie einen Hint oder ein warning aus?
|
Re: Funktion mit Repeat-Schleife erzeugt falsches Ergebnis
Danke Luckie !
Du hast Recht. :shock: Und zwar gibt er die Warnung aus, dass edx nicht initialisiert wurde. Ich hab jetzt einfach mal edx:=0; am Anfang der Funktion hingeschrieben und jetzt klappts. Man ist das peinlich :pale: Ich dachte das muss man nicht machen. Oder ist es sauberer jede Variable mit :=0 oder :='' zu "initialisieren" ? |
Re: Funktion mit Repeat-Schleife erzeugt falsches Ergebnis
Wenn ihnen nicht unbedingt ein Wert zugewiesen wird, mit Sicherheit. Globale variablen am besten gleich bei der Deklarartion initialisieren.
|
Re: Funktion mit Repeat-Schleife erzeugt falsches Ergebnis
Ich werde diesen Ratschlag befolgen.
Vielen Dank Luckie. So spät in der Nacht noch dabei Usern zu helfen. Das find ich wirklich überaus nett von dir. :thumb: :dp: |
Re: Funktion mit Repeat-Schleife erzeugt falsches Ergebnis
Statt
Delphi-Quellcode:
kannst du auch
i := i + 2;
Delphi-Quellcode:
schreiben.
Inc(i, 2);
|
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