ich bin absoluter Anfänger in Sachen Lazarus/ Pascal und habe mir gerade ein paar Übungen angeschaut. Ich wollte einmal aus verschiedenen Zahlen die Größte anzeigen lassen und auch eine Prozedur um ein Array von Zahlen zu sortieren.
Mir geht es jetzt garnicht darum, dafür ein fertiges Programm zu bekommen sondern, ich hänge gerade an einer Fehlermeldung:
"External: SIGSEGV« ausgelöst ListBox3.Items.Add"
Die erste Prozedur zeigt die größte Zahl an, in der 2. Prozedur sollen Zahlen sortiert werden, der Code ist wahrscheinlich grütze, verbessere ich noch, aber ich bekomme die Fehlermeldung nicht weg. Warum kann ich in der 2. Prozedur nicht auf die Listbox3 zugreifen und dort Zahlen einfügen?
In der ersten Prozedur gibt es auch einen anderen komischen Fehler: Ich hatte dort ein 2. Array (zahlen_gr) erstellt, was ich in einer for Schleife einmal mit Zahlen fülle, dann aber doch nicht weiterverwendet habe, es könnte im Prinzip gelöscht werden.
Wenn ich es aber drin lasse, wird manchmal nicht die korrekte größte Zahl ausgegeben (z.B. bei array [1..35]). Lösche ich die Zeile
Code: Alles auswählen
zahlen_gr[index]:=index;
Wie gesagt absoluter Anfänger.

Vielen Dank für Eure Rückmeldungen.
Lazarus v2.0.12 - Kubuntu 20.04 64bit
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
ListBox2: TListBox;
ListBox3: TListBox;
Memo1: TMemo;
min: TEdit;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var zahlen: array [1..35] of integer;
zahlen_gr: array [1..10] of integer;
index, index2, k: integer;
gr: boolean;
begin
K:=Length(zahlen);
index2:=1;
gr:=false;
for index:= 1 to k do
begin
zahlen[index]:=random(50);
ListBox1.Items.Add(IntToStr(zahlen[index]));
zahlen_gr[index]:=index; // das verursacht Fehler, warum????? - größte Zahl eig 48, laut Programm 46
end;
for index:= 1 to k do
begin
gr:=false;
index2:=1;
ListBox2.Items.Add('Schleife Nr.' + IntToStr(index));
repeat
if index2=k+1 then
begin
ShowMessage('größte Zahl ' + IntToStr(zahlen[index]));
ListBox2.Items.Add('größte Zahl');
gr:=true;
exit;
end;
ListBox2.Items.Add('Zahl1 Nr.' + IntToStr(zahlen[index]));
ListBox2.Items.Add('Zahl2 Nr.' + IntToStr(zahlen[index2]));
if zahlen[index2]>zahlen[index] then
begin
gr:=true;
ListBox2.Items.Add('ja');
end;
ListBox2.Items.Add('Schleife2 Nr.' + IntToStr(index2));
ListBox2.Items.Add('Bool ' + gr.ToString);
index2:=index2+1;
until gr=true;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var zahlen: array [1..7] of integer;
index, index2, k, temp: integer;
gr: boolean;
begin
K:=Length(zahlen);
index2:=1;
gr:=false;
for index:= 1 to k do
begin
zahlen[index]:=random(50);
ListBox1.Items.Add(IntToStr(zahlen[index]));
end;
for index:= 1 to k do
begin
gr:=false;
index2:=1;
//ListBox2.Items.Add('Schleife Nr.' + IntToStr(index));
repeat
if index2=k+1 then
begin
//ShowMessage('größte Zahl ' + IntToStr(zahlen[index]));
//ListBox2.Items.Add('größte Zahl');
gr:=true;
end;
// ListBox2.Items.Add('Zahl1 Nr.' + IntToStr(zahlen[index]));
//ListBox2.Items.Add('Zahl2 Nr.' + IntToStr(zahlen[index2]));
if zahlen[index2]<zahlen[index] then
begin
temp:=zahlen[index2];
zahlen[index2]:=zahlen[index];
zahlen[index]:=temp;
//ListBox2.Items.Add('ja');
end;
//ListBox2.Items.Add('Schleife2 Nr.' + IntToStr(index2));
//ListBox2.Items.Add('Bool ' + gr.ToString);
index2:=index2+1;
until gr=true;
end;
for index:= 1 to k do
begin
ListBox3.Items.Add(IntToStr(zahlen[index])); // hier kommt Fehler SIGSEGV
//Memo1.Lines.Add(IntToStr(temp));
//ShowMessage(IntToStr(zahlen[index]));
end;
end;
end.