Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Integer mit Wert "1243032" initialisiert (https://www.delphipraxis.net/66865-integer-mit-wert-1243032-initialisiert.html)

TheAn00bis 5. Apr 2006 18:14


Integer mit Wert "1243032" initialisiert
 
Hey, folgender Code multipliziert zwei Integer.
Ich weiß, dass das auch einfacher geht, aber der Code soll später in Assembler umgesetzt werden.
Die Funktionsweise hat nichts mit meinem Problem zu tun:
Das showmessage in Zeile 3 gibt mir immer "1243032" aus.
In anbetracht der Tatsache, dass Integer normalerweise mit "0" initialisiert werden, hat mich das sehr verwundert und
ich habe ewig gebraucht darauf zu kommen, dass ich h2 erst auf "0" setzen muss.
Warum hat h2 nicht von Beginn an den Wert "0"?

Delphi-Quellcode:
function multi(w1,w2:integer):integer;
var h1, h2:integer;
begin
  showmessage(inttostr(h2));
  h2:=0;
  repeat
      h1:= w1 mod 2;
      if h1 <> 0 then
         begin
            h2:=h2+w2;
            dec(w1);
         end
      else
         begin
            w1:=w1 div 2;
            w2:=w2 * 2;
         end;
  until w1=1;

  result:=w2+h2;
end;

procedure TForm1.buttonclick(Sender: TObject);
begin
     edit3.text:=inttostr(multi(strtoint(edit1.text),strtoint(edit2.text)));
end;

Khabarakh 5. Apr 2006 18:20

Re: Integer mit Wert "1243032" initialisiert
 
Variablen auf dem Stack wurden noch nie initialisiert (solange du nicht Delphi.Net verwendest).

Luckie 5. Apr 2006 18:23

Re: Integer mit Wert "1243032" initialisiert
 
Oder anderst gesagt: Lokale variablen werden nie initialisiert.

TheAn00bis 5. Apr 2006 18:23

Re: Integer mit Wert "1243032" initialisiert
 
Zitat:

Zitat von Khabarakh
Variablen auf dem Stack wurden noch nie initialisiert (solange du nicht Delphi.Net verwendest).

Auf welchem Stack? Beantwortet das meine Frage? Erkläre es mir! :D

Edit:
Zitat:

Zitat von Luckie
Oder anderst gesagt: Lokale variablen werden nie initialisiert.

Aber dann müssten sie doch noch eher Null sein?

Luckie 5. Apr 2006 18:25

Re: Integer mit Wert "1243032" initialisiert
 
Lokale Variablen werden auf dem Stack abgelegt.

Nein warum sollten sie? da steht das drinne, was zufällig an dieser Stelle im Speicher steht.

Aber du hättest schon viel früher draufkommen sollen, da dir der Compiler eine entsprechende Warnung ausgeben haben sollte.

Christian Seehase 5. Apr 2006 18:27

Re: Integer mit Wert "1243032" initialisiert
 
Moin An00bis,

Zitat:

Zitat von TheAn00bis
Aber dann müssten sie doch noch eher Null sein?

Nein, denn:
Der Stack ist ein Speicherbereich, der u.a., die Werte der lokalen Variablen enthält.
Dir wird immer der Wert angezeigt, der sich an der Stelle befindet, die als Speicher für die lokale Variable verwendet wird.

TheAn00bis 5. Apr 2006 18:28

Re: Integer mit Wert "1243032" initialisiert
 
Zitat:

Zitat von Luckie
Lokale Variablen werden auf dem Stack abgelegt.

Nein warum sollten sie? da steht das drinne, was zufällig an dieser Stelle im Speicher steht.

Aber du hättest schon viel früher draufkommen sollen, da dir der Compiler eine entsprechende Warnung ausgeben haben sollte.

Irgendwie bricht für mich eine Welt zusammen. :D
Ich wundere mich gerade, dass überhaupt irgendeine Funktion von mir funktioniert.

Danke für die Informationen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 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