Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Variable nicht initialisiert? (https://www.delphipraxis.net/209241-variable-nicht-initialisiert.html)

TurboMagic 14. Nov 2021 14:50

Variable nicht initialisiert?
 
Hallo,

kann mir mal jemand einen Tipp geben, warum der Compiler hier eine W1036 Warnung,
dass i möglicherweise nicht initialisiert wäre ausgibt?

Delphi-Quellcode:
  procedure encode(data : TBytes);
  var
    i, mod_d, div_d, len_d : UInt64;
    hdata : T128;
  begin
    len_d := length(data);
    if (len_d > 0) then
    begin
      n := 0;
      div_d := len_d div 16;
      if div_d > 0 then
      { TODO : When 6.5 is started the while should be replaced by the for loop again }
      //for i := 0 to div_d -1 do
      i := 0;
// Warnung kommt für diese While Schleife, für das While direkt
      while (i <= div_d -1) do
      begin
        x := poly_mult_H(XOR_PointerWithT128(@data[n], x ));
        inc(n, 16);
        { TODO : Remove the inc when 6.5 implementation starts }
        inc(i);
      end;

      mod_d := len_d mod 16;
      if mod_d > 0 then
      begin
        hdata := nullbytes;
        Move(data[n], hdata[0], mod_d);
        x := poly_mult_H(XOR_T128(hdata, x));
      end;
    end;
  end;

himitsu 14. Nov 2021 14:56

AW: Variable nicht initialisiert?
 
Zitat:

Delphi-Quellcode:
if div_d > 0 then

Weil das nachfolgende
Delphi-Quellcode:
i := 0;
nicht immer vor dem WHILE ausgeführt wird :zwinker:

Verschieb den Teil von diesem IF einfach mit einem MOD in das erste IF, [edit] nee, weil wegen dem letzten IF nach dem WHILE
oder das i:=0; vor's IF
oder ein BEGIN drumrum

venice2 14. Nov 2021 15:37

AW: Variable nicht initialisiert?
 
Weil i := 0; nun mal nicht initialisiert ist.
Eine Initialisierung findet nur statt wenn Bedingung div_d > 0 erfüllt ist.
Einfach unter oder über n := 0; setzen.

Delphi-Quellcode:
while (i <= div_d -1) do
Verwendung von i

Da i aber nur Initialisiert wird wenn obige Bedingung erfüllt ist gibt es hier eine Entsprechende Meldung.
i könnte also theoretisch irgendeine Zahl sein weil nicht initialisiert.
Solche Fehler sind sehr schwer zu finden!

TurboMagic 14. Nov 2021 16:06

AW: Variable nicht initialisiert?
 
Hallo,

danke, ihr habt beide recht!
Hab's inzwischen selber gemerkt.
Ist inzwischen gefixt.

Grüße
TurboMagic


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