im untenstehenden Code gibt es einen komischen fehler: beim Beenden der Schleife (im Debug modus genau dann, wenn es so aussieht
Delphi-Quellcode:
==> for k:=0 to keylength-1 do
begin
for i:=0 to 25 do
begin
stringgrid_mono.Cells[k+1,i+1]:=IntToStr(letter[k,i]);
end;
end;
dabei ist "==>" dieser grüne debugpfeil, k = keylength (also eigentlich der Schritt, nachdem er aus der Schleife springen sollte) und i = natürlich 25.
Dann, wenn ich in der abgebildeten Situation auf "Next Step" gehe (F8 ), dann gibts ne invalidPointerException...
Ich hoffe, die anderen verwendeten Komponenten sind durch die Benennung deutlich
hoffentlich weiß einer Rat, bin hier schon am Verzweifeln...
Delphi-Quellcode:
//Prozedur zum Durchführen der Häufigkeitsanalyse
procedure Tkrypt_form.Hufigkeitsanalyse1Click(Sender: TObject);
var i,j,k : integer;
keylength : integer;
modul : integer;
chiffre, teilchiffre : string;
letter : TLetterFreq;
begin
//Schlüssellänge einlesen
keylength := StrToInt(edit_keylength.Text);
//entsprechend viele Spalten für die Ausgabe schaffen
stringgrid_mono.ColCount := keylength+1;
//entsprechend Array initialisieren
SetLength(letter,keylength);
//verschlüsselten Text einlesen
chiffre:='';
for i:=0 to richedit_input.lines.Count-1 do
chiffre:=chiffre+richedit_input.Lines[i];
//Sollte kein Text da sein, so füge ein Leerzeichen ein
if chiffre='' then
chiffre:=' ';
//Mache das Stringgrid sichtbar
stringgrid_mono.Visible:=true;
//passe die 1. Spaltenbreite an
stringgrid_mono.ColWidths[0]:=15;
//Formatierung des Stringgrids bearbeiten
for k:=0 to keylength-1 do
begin
//Füge in den Kopf den Rest mod Schlüssellänge ein
stringgrid_mono.cells[k+1,0]:=IntToStr(k);
//Füge in die Spalte ganz links die Buchstabenbezeichnungen ein
stringgrid_mono.Cells[0,k+1]:=char(65+k);
end;
//Häufigkeiten durch Funktion letter_frequency ermitteln
letter:=letter_frequency(chiffre,keylength);
for k:=0 to keylength-1 do
begin
for i:=0 to 25 do
begin
stringgrid_mono.Cells[k+1,i+1]:=IntToStr(letter[k,i]);
end;
end;
end;