[gelöst] Komisches Verhalten vom Programm und keine Erklärung

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
juelin
Beiträge: 237
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

[gelöst] Komisches Verhalten vom Programm und keine Erklärung

Beitrag von juelin »

Hallo zusammen,
ich benutze Lazarus 3.8 mit FPC 3.2.2 unter Windows 11
mein Programm macht komische Dinge und ich kann mir das nicht erklären.
Es geht um die Variablen indarb, indsa und indso.
Die Werte stimmen nicht!!!!
Hier der Code:

Code: Alles auswählen

type TUhrzeit = record                                                          // Record für Einträge im Fahrplan (Uhrzeit und Verkehrsmittel)
  stunde: integer;
  minute: integer;
  verkehrsmittel: string;
end;
procedure TForm1.Druckanzeige;
  var
    z12: integer;
    tt: string;
    f1: string;
    f2: string;
    f3: string;
    f4: string;
    f5: string;
    f6: string;
    f7: string;
    f8: TDateTime;
    f9: TDateTime;
    f10: string;
    f11: integer;
    f12: string;
    f13: string;
    f14: string;
    f15: string;
    f16: string;
    f17: string;
    indarb: integer;
    indsa: integer;
    indso: integer;
    induhr: integer;
    ind1: integer;
    ind2: integer;
    ind3: integer;
    vdatum: TDateTime;
    indverkehr: integer;
    verkehr: string;
    tabarbeitstag: array [1..1000] of TUhrzeit;
    tabsamstag: array [1..1000] of TUhrzeit;
    tabsonntag: array [1..1000] of TUhrzeit;
    tabverkehr: array [1..10] of TUhrzeit;
 // iart, ifunc und izeich sind vom Typ integer;   
begin
.......................................
    indarb:=0;
    indsa:=0;
    indso:=0;
    indverkehr:=0;
    vdatum:=0;
ikomma:=0;  // Summe iart+ifunc+izeich
iart:=0;    // entspricht wie indarb sein soll
ifunc:=0;   // entspricht wie indsa sein soll
izeich:=0;  // entspricht wie indso sein soll
    Form1.ZQuery1.SQL.Text:='SELECT * FROM fahrplan WHERE Tour=:tour AND Linie=:linie AND solldatum=:solldatum ORDER BY sollzeit, solldatum, Tour, Linie, nach, Wochentag, von';
    Form1.ZQuery1.ParamByName('tour').asString:=atour1;
    Form1.ZQuery1.ParamByName('linie').asString:=atour3;
    Form1.ZQuery1.ParamByName('solldatum').asDateTime:=vdatum;
    Form1.ZQuery1.Open;
    while not Form1.ZQuery1.EOF do
    begin
      f1:=Form1.ZQuery1.Fields[0].AsString;
      f2:=Form1.ZQuery1.Fields[1].AsString;
      f3:=Form1.ZQuery1.Fields[2].AsString;
      f4:=Form1.ZQuery1.Fields[3].AsString;
      f5:=Form1.ZQuery1.Fields[4].AsString;
      f6:=Form1.ZQuery1.Fields[5].AsString;
      f7:=Form1.ZQuery1.Fields[6].AsString;
      f8:=Form1.ZQuery1.Fields[7].AsDateTime;
      f9:=Form1.ZQuery1.Fields[8].AsDateTime;
      f13:=Form1.ZQuery1.Fields[9].AsString;
      f10:=Form1.ZQuery1.Fields[10].AsString;
      f11:=Form1.ZQuery1.Fields[11].AsInteger;
      f12:=Form1.ZQuery1.Fields[12].AsString;
      f14:=Form1.ZQuery1.Fields[13].AsString;
      f2:=Form1.Blankweg(3, f2);
      f4:=Form1.Blankweg(3, f4);
      f5:=Form1.Blankweg(3, f5);
      f7:=Form1.Blankweg(3, f7);
      f14:=Form1.Blankweg(3, f14);
      if f4 = '' then
      begin
        if f5 <> '' then
        begin
          if f2 <> '' then
          begin
            if f14 <> '' then
            begin
ikomma:=ikomma+1;
              f12:=Copy(f7,1,2);
              f13:=Copy(f7,4,2);
              if ((f14 = 'Montag') or (f14 = 'Dienstag') or (f14 = 'Mittwoch') or (f14 = 'Donnerstag') or (f14 = 'Freitag') or (f14 = 'Arbeitstag')) then
              begin
iart:=iart+1;
                if indarb < 1000 then
                begin
// hier wird indarb geladen                
                  indarb:=indarb+1;
                  tabarbeitstag[indarb].stunde:=StrToInt(f12);
                  tabarbeitstag[indarb].minute:=StrToInt(f13);
                  tabarbeitstag[indarb].verkehrsmittel:=f2;
                  istell:=0;
                  if indverkehr > 0 then
                  begin
                    for inummer:=1 to indverkehr do
                    begin
                      if tabverkehr[inummer].verkehrsmittel = f2 then istell:=inummer;
                    end;
                  end;
                  if istell > 0 then
                  begin
                    inummer:=tabverkehr[istell].stunde;
                    inummer:=inummer+1;
                    tabverkehr[istell].stunde:=inummer;
                  end else begin
                    if indverkehr < 10 then
                    begin
                      indverkehr:=indverkehr+1;
                      tabverkehr[indverkehr].stunde:=1;
                      tabverkehr[indverkehr].verkehrsmittel:=f2;
                    end;
                  end;
                end;
              end;
              if f14 = 'Samstag' then
              begin
ifunc:=ifunc+1;
                if indsa < 1000 then
                begin
// hier wird indsa geladen                
                  indsa:=indsa+1;
                  tabsamstag[indsa].stunde:=StrToInt(f12);
                  tabsamstag[indsa].minute:=StrToInt(f13);
                  tabsamstag[indsa].verkehrsmittel:=f2;
                  istell:=0;
                  if indverkehr > 0 then
                  begin
                    for inummer:=1 to indverkehr do
                    begin
                      if tabverkehr[inummer].verkehrsmittel = f2 then istell:=inummer;
                    end;
                  end;
                  if istell > 0 then
                  begin
                    inummer:=tabverkehr[istell].stunde;
                    inummer:=inummer+1;
                    tabverkehr[istell].stunde:=inummer;
                  end else begin
                    if indverkehr < 10 then
                    begin
                      indverkehr:=indverkehr+1;
                      tabverkehr[indverkehr].stunde:=1;
                      tabverkehr[indverkehr].verkehrsmittel:=f2;
                    end;
                  end;
                end;
              end;
              if ((f14 = 'Sonntag') or (f14 = 'Feiertag')) then
              begin
izeich:=izeich+1;
                if indso < 1000 then
                begin
// hier wird indso geladen                
                  indso:=indso+1;
                  tabsonntag[indso].stunde:=StrToInt(f12);
                  tabsonntag[indso].minute:=StrToInt(f13);
                  tabsonntag[indso].verkehrsmittel:=f2;
                  istell:=0;
                  if indverkehr > 0 then
                  begin
                    for inummer:=1 to indverkehr do
                    begin
                      if tabverkehr[inummer].verkehrsmittel = f2 then istell:=inummer;
                    end;
                  end;
                  if istell > 0 then
                  begin
                    inummer:=tabverkehr[istell].stunde;
                    inummer:=inummer+1;
                    tabverkehr[istell].stunde:=inummer;
                  end else begin
                    if indverkehr < 10 then
                    begin
                      indverkehr:=indverkehr+1;
                      tabverkehr[indverkehr].stunde:=1;
                      tabverkehr[indverkehr].verkehrsmittel:=f2;
                    end;
                  end;
                end;
              end;
            end;
          end;
        end;
      end;
      Form1.ZQuery1.Next;
    end;
    Form1.ZQuery1.Close;
                 // Inhalt der Variablen
ikomma:=ikomma;  // = 42
iart:=iart;      // = 16
ifunc:=ifunc;    // = 14
izeich:=izeich;  // = 12  
indarb:=indarb;  // = 12  sollte = iart sein
indsa:=indsa;    // = 12  sollte = ifunc sein
indso:=indso;    // = 12  sollte = izeich sein
indverkehr:=indverkehr;  // = 2
..................................................
end;
Hat da jemand eine Idee?
Danke und Gruß
Jürgen
Zuletzt geändert von juelin am Di 29. Apr 2025, 14:45, insgesamt 2-mal geändert.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Komisches Verhalten vom Programm und keine Erklärung

Beitrag von m.fuchs »

Ja, der Quellcode ist unübersichtlich. Sowas führt oft dazu, dass das Verhalten des Programmcodes nicht den Vorstellungen des Programmierers entspricht.

Was macht man dagegen? Quellcode aufräumen, wo möglich Dinge in eigene Methoden auslagern, Variablen aussagekräftiger benennen, den modularisierten Code mit Unittests prüfen,...
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

wp_xyz
Beiträge: 5129
Registriert: Fr 8. Apr 2011, 09:01

Re: Komisches Verhalten vom Programm und keine Erklärung

Beitrag von wp_xyz »

Ohne auf das beschriebene Problem einzugehen, folgende Bemerkungen:
- Warum statische Arrays[1..1000]? Da du nur einige zehn Einträge hast, ist der Rest an Speicher verschwendet. Nimm stattdessen dynamische Arrays oder Listen (TFPList).
- Verwende nie den Namen der Instanz (Form1) im Code der Klasse (TForm1). Damit ist es unmöglich die Variable (Form1) einmal umzubenennen oder eine zweite Instanz zu erzeugen. Lasse das "Form1." einfach weg.

Um herauszufinden, wo die falschen Variablenwerte herkommen, musst du mit dem Debugger die betreffende Routine Zeile für Zeile durchgehen, Variablen prüfen und schauen, ob die Bedingungen erfüllt sind. Bei mir ist da häufig ein > statt ein >= oder umgekehrt, oder eine logische Bedingung sollte "or" statt "and" sein, gerade im Zusammenhang mit Verneinungen, oder, bei einer Datenbank-Anwendung, Felder sind unerwarteterweise leer.
Zuletzt geändert von wp_xyz am Di 29. Apr 2025, 11:23, insgesamt 1-mal geändert.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1639
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Komisches Verhalten vom Programm und keine Erklärung

Beitrag von fliegermichl »

indarb wird mit 0 initialisiert und als Index auf das Array verwendet, welches mit dem Index 1 beginnt.

Benutzeravatar
juelin
Beiträge: 237
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Komisches Verhalten vom Programm und keine Erklärung

Beitrag von juelin »

Also,
m.fuchs
so unübersichtlich finde ich den Code gar nicht. Zumal ich ja nur einen Teil der procedure
angegeben habe, die procedure ist in wirklichkeit 3-4 mal so groß.
Ausserdem habe ich die Betroffenen Stellem mit Kommentaren versehen, das sollte helfen.
Fliegermichel
wenn Du genau hin geschaut hättest, dann hätest Du gesehen, das ich den Index vorher immer um 1 erhöhe.
wp_xyz
du irrst, die Anzahl Sätze in der Datenbank kann für den Fall mehrere Hundert Sätze betragen.
24 Stunden a 10-20 Abfahrzeiten pro Stunde
Das mit dem debuggen ist zwar richtig, aber die arbeit wollte ich mir nach Möglichkeit sparen.
Gruß
Jürgen

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Komisches Verhalten vom Programm und keine Erklärung

Beitrag von theo »

Könnte es sein, dass du einfach falsch misst? Wie machst du es denn ohne Debugger?
Der Code, den du uns zeigst, hat nur eine Möglichkeit, dass iart und indarb unterschiedlich sind und das ist wenn indarb >= 1000 ist, soweit ich das sehe. Allerdings ist iart global deklariert?

Code: Alles auswählen

iart:=iart+1;
if indarb < 1000 then
     begin
     indarb:=indarb+1;

wp_xyz
Beiträge: 5129
Registriert: Fr 8. Apr 2011, 09:01

Re: Komisches Verhalten vom Programm und keine Erklärung

Beitrag von wp_xyz »

juelin hat geschrieben: Di 29. Apr 2025, 12:00 du irrst, die Anzahl Sätze in der Datenbank kann für den Fall mehrere Hundert Sätze betragen.
24 Stunden a 10-20 Abfahrzeiten pro Stunde
Ich habe keine Ahnung, worüber es in deinem Programm geht. Und selbst wenn, dann sind es noch einige hundert zu viel. Oder was ist, wenn es doch über Tausend sind? Mit dynamischen Arrays hast du das Problem nicht, nur ein kleines bisschen mehr Programmieraufwand.
juelin hat geschrieben: Di 29. Apr 2025, 12:00 Das mit dem debuggen ist zwar richtig, aber die arbeit wollte ich mir nach Möglichkeit sparen.
Tja...

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Komisches Verhalten vom Programm und keine Erklärung

Beitrag von m.fuchs »

juelin hat geschrieben: Di 29. Apr 2025, 12:00 so unübersichtlich finde ich den Code gar nicht. Zumal ich ja nur einen Teil der procedure
angegeben habe, die procedure ist in wirklichkeit 3-4 mal so groß.
Dann ist der Code noch 3-4 mal so unübersichtlich.

Alleine wenn ich die Deklarationen von f1 bis f17 sehe, weiß ich dass das keine gute Idee ist.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6762
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Komisches Verhalten vom Programm und keine Erklärung

Beitrag von af0815 »

Eine Instanz (Form1) hat in einem Objekt oder Klasse nichts verloren. Vermeide in der Klasse globale Variablen, mach die Variable in die Klasse und gib bei der Erstellung der Klasse den Wert vor.

Den Code bis zu einem Breakpoint laufen zu lassen und dort sich die Variablen anzusehen ist zumutbar. Nur so kann man den Fehler eingrenzen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

paweld
Beiträge: 85
Registriert: So 11. Jun 2023, 16:01
OS, Lazarus, FPC: Lazarus trunk, FPC fixes

Re: Komisches Verhalten vom Programm und keine Erklärung

Beitrag von paweld »

Wie bereits gesagt, strukturieren Sie Ihren Code:
- Trennen Sie sich wiederholenden Code in separate Funktionen/Prozeduren
- Verwenden Sie Listen oder dynamische Arrays anstelle von Arrays mit fester Größe
Dann wird es sicherlich leichter sein, das Problem zu finden.
Zum Beispiel:

Code: Alles auswählen

uses
  fgl;

type
  TUhrzeit = class
    stunde: Integer;
    minute: Integer;
    verkehrsmittel: String;
  end;

  { TUhrzeitList }

  TUhrzeitList = class(specialize TFPGObjectList<TUhrzeit>)
    procedure Add(Astunde, Aminute, Averkehrsmittel: String);
  end;

{ TUhrzeitList }

procedure TUhrzeitList.Add(Astunde, Aminute, Averkehrsmittel: String);
var
  tu: TUhrzeit;
begin
  tu := TUhrzeit.Create;
  tu.stunde := StrToInt(Astunde);
  tu.minute := StrToInt(Aminute);
  tu.verkehrsmittel := Averkehrsmittel;
  inherited Add(tu);
end;

{ TForm1 }

var
  ikomma, iart, ifunc, izeich: Integer;
  atour1, atour3: String;

procedure TForm1.Druckanzeige;
var
  z12: Integer;
  tt: String;
  f1: String;
  f2: String;
  f3: String;
  f4: String;
  f5: String;
  f6: String;
  f7: String;
  f8: TDateTime;
  f9: TDateTime;
  f10: String;
  f11: Integer;
  f12: String;
  f13: String;
  f14: String;
  f15: String;
  f16: String;
  f17: String;
  indarb: Integer;
  indsa: Integer;
  indso: Integer;
  induhr: Integer;
  ind1: Integer;
  ind2: Integer;
  ind3: Integer;
  i: Integer;
  vdatum: TDateTime;
  indverkehr: Integer;
  verkehr: String;
  tabarbeitstag: TUhrzeitList;
  tabsamstag: TUhrzeitList;
  tabsonntag: TUhrzeitList;
  tabverkehr: TUhrzeitList;
  // iart, ifunc und izeich sind vom Typ integer;

  procedure AddVerkehr(Averkehrsmittel: String);
  var
    istell, inummer: Integer;
  begin
    istell := -1;
    for inummer := indverkehr - 1 downto 0 do
    begin
      if tabverkehr.Items[inummer].verkehrsmittel = Averkehrsmittel then
      begin
        istell := inummer;
        break;
      end;
    end;
    if istell >= 0 then
    begin
      inummer := tabverkehr.Items[istell].stunde;
      inummer := inummer + 1;
      tabverkehr.Items[istell].stunde := inummer;
    end
    else if indverkehr < 10 then
    begin
      indverkehr := indverkehr + 1;
      tabverkehr.Items[indverkehr - 1].stunde := 1;
      tabverkehr.Items[indverkehr - 1].verkehrsmittel := Averkehrsmittel;
    end;
  end;

begin
  tabarbeitstag := TUhrzeitList.Create;
  tabsamstag := TUhrzeitList.Create;
  tabsonntag := TUhrzeitList.Create;
  tabverkehr := TUhrzeitList.Create;
  for i := 1 to 10 do
    tabverkehr.Add('0', '0', '');
  indverkehr := 0;
  vdatum := 0;
  ikomma := 0;  // Summe iart+ifunc+izeich
  iart := 0;    // entspricht wie indarb sein soll
  ifunc := 0;   // entspricht wie indsa sein soll
  izeich := 0;  // entspricht wie indso sein soll
  ZQuery1.SQL.Text := 'SELECT * FROM fahrplan WHERE Tour=:tour AND Linie=:linie AND solldatum=:solldatum ORDER BY sollzeit, solldatum, Tour, Linie, nach, Wochentag, von';
  ZQuery1.ParamByName('tour').AsString := atour1;
  ZQuery1.ParamByName('linie').AsString := atour3;
  ZQuery1.ParamByName('solldatum').AsDateTime := vdatum;
  ZQuery1.Open;
  while not Form1.ZQuery1.EOF do
  begin
    f1 := ZQuery1.Fields[0].AsString;
    f2 := ZQuery1.Fields[1].AsString;
    f3 := ZQuery1.Fields[2].AsString;
    f4 := ZQuery1.Fields[3].AsString;
    f5 := ZQuery1.Fields[4].AsString;
    f6 := ZQuery1.Fields[5].AsString;
    f7 := ZQuery1.Fields[6].AsString;
    f8 := ZQuery1.Fields[7].AsDateTime;
    f9 := ZQuery1.Fields[8].AsDateTime;
    f13 := ZQuery1.Fields[9].AsString;
    f10 := ZQuery1.Fields[10].AsString;
    f11 := ZQuery1.Fields[11].AsInteger;
    f12 := ZQuery1.Fields[12].AsString;
    f14 := ZQuery1.Fields[13].AsString;
    f2 := Blankweg(3, f2);
    f4 := Blankweg(3, f4);
    f5 := Blankweg(3, f5);
    f7 := Blankweg(3, f7);
    f14 := Blankweg(3, f14);
    if (f4 = '') and (f5 <> '') and (f2 <> '') and (f14 <> '') then
    begin
      ikomma := ikomma + 1;
      f12 := Copy(f7, 1, 2);
      f13 := Copy(f7, 4, 2);
      case LowerCase(f14) of
        'montag', 'dienstag', 'mittwoch', 'donnerstag', 'freitag', 'arbeitstag':
          begin
            iart := iart + 1;
            tabarbeitstag.Add(f12, f13, f2);
            AddVerkehr(f2);
          end;
        'samstag':
          begin
            ifunc := ifunc + 1;
            tabsamstag.Add(f12, f13, f2);
            AddVerkehr(f2);
          end;
        'sonntag', 'feiertag':
          begin
            izeich := izeich + 1;
            tabsonntag.Add(f12, f13, f2);
            AddVerkehr(f2);
          end;
      end;
    end;
    ZQuery1.Next;
  end;
  Form1.ZQuery1.Close;
  // Inhalt der Variablen
  ikomma := ikomma;  // = 42
  iart := iart;      // = 16
  ifunc := ifunc;    // = 14
  izeich := izeich;  // = 12
  indarb := tabarbeitstag.Count;  // = 12  sollte = iart sein
  indsa := tabsamstag.Count;    // = 12  sollte = ifunc sein
  indso := tabsonntag.Count;    // = 12  sollte = izeich sein
  indverkehr := indverkehr;  // = 2
end;
Grüße / Pozdrawiam
paweld

Benutzeravatar
juelin
Beiträge: 237
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Komisches Verhalten vom Programm und keine Erklärung

Beitrag von juelin »

ich denke ich habe das Problem gelöst.
Wenn ich einen Haltepunkt im Programm gemacht habe und mit dem Cursor auf die
Variable gegangen bin, so hat er mir den falschen Wert angezeigt.
Ich habe jetzt die Variablen in einem Label ausgegeben.

Code: Alles auswählen

Label2.Caption:=IntToStr(indarb)+'/'+IntToStr(indsa)+'/'+IntToStr(indso);
Jetzt stimmt auch der Wert.
Ganz schön Blöd.
Da muss man erst mal drauf kommen.
Könnte sein, dass das ein Lazarusproblem ist.
Globale Variablen stimmen, lokale Variablen nicht.
im Debugger überwachte Variablen stimmen die Werte bei den lokalen Variablen auch nicht.
Gruß
Jürgen
Zuletzt geändert von juelin am Di 29. Apr 2025, 15:00, insgesamt 3-mal geändert.

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Komisches Verhalten vom Programm und keine Erklärung

Beitrag von theo »

juelin hat geschrieben: Di 29. Apr 2025, 14:44 ich denke ich habe das Problem gelöst.
Wenn ich einen Haltepunkt im Programm gemacht habe und mit dem Cursor auf die
Variable gegangen bin, so hat er mir den falschen Wert angezeigt.
Ich habe jetzt die Variablen in einem Label ausgegeben.
Jetzt stimmt auch der Wert.
Ganz schön Blöd.
Da muss man erst mal drauf kommen.
Genau so etwas hatte ich vermutet mit der Frage: "Könnte es sein, dass du einfach falsch misst?" :lol:

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1639
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: [gelöst] Komisches Verhalten vom Programm und keine Erklärung

Beitrag von fliegermichl »

Das ist mir bei Prozeduren schonmal aufgefallen.

Code: Alles auswählen

program Project1;

procedure gibaus(i : integer);
begin
 writeln(i);
end;

begin
  gibaus(4);
end.
Wenn ich auf das begin in der Prozedur einen Breakpoint setze und dann mit der Maus auf den Parameter i zeige, sehe in "0". Geh ich mit F8 eine Zeile weiter, dann wird "4" angezeigt.

Antworten