![]() |
Sehr komischer Fehler beim Beenden der Schleife...
im untenstehenden Code gibt es einen komischen fehler: beim Beenden der Schleife (im Debug modus genau dann, wenn es so aussieht:)
Delphi-Quellcode:
dabei ist "==>" dieser grüne debugpfeil, k = keylength (also eigentlich der Schritt, nachdem er aus der Schleife springen sollte) und i = natürlich 25.
==> 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; 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; |
Re: Sehr komischer Fehler beim Beenden der Schleife...
Wieviele Zeilen hat das Grid?
|
Re: Sehr komischer Fehler beim Beenden der Schleife...
27
|
Re: Sehr komischer Fehler beim Beenden der Schleife...
Ah, Moment. Versuch es mal mit
Delphi-Quellcode:
Du greifst ja auch in der Schleife auf k+1 zu.
for k:=0 to keylength-2 do
|
Re: Sehr komischer Fehler beim Beenden der Schleife...
das wars leider nicht; keylength regelt sie Länge von letter und dort wird ja auch nur auf k und nicht auf k+1 zugegriffen.
weiterhin setzt keylength die Spalten auf keylength+1; und deswegen entseht da auch kein konflikt... würde es was nützen, wennich das Projekt mal poste? ist zwar etwas groß und noch nicht aufgeräumt, aber vielleicht.. |
Re: Sehr komischer Fehler beim Beenden der Schleife...
Naja, schaden kann es nicht. Aber bitte nicht im Quellcode, sondern als Anhang;)
|
Re: Sehr komischer Fehler beim Beenden der Schleife...
Liste der Anhänge anzeigen (Anzahl: 1)
Also als erstes mal großes Danke wer sich das mal anschaut... sitze mal wieder hier an nem Fehlerchen ne halbe Stunde lang...
Die betreffende Prozedur ist die erste im Menü-Menü :) "Methoden" (->"Häufigkeitsanalyse) Wie gesagt noch nicht sehr strukturiert, woltle das noch erledigen, aber es funktioniert ja nichtmal... |
Re: Sehr komischer Fehler beim Beenden der Schleife...
Ich habe einen Fehler in der Funktion letter_frequency gefunden.
Delphi-Quellcode:
BTW: Du solltest das dynamische Array nach Gebrauch mit SetLength wieder freigeben.
//Funktion für die (periodische) Häufigkeitsanalyse
function letter_frequency (chiffre:string;keylength:integer):TLetterFreq; var i,j,k : integer; teilchiffre : string; begin SetLength(Result,keylength); for i:=0 to keylength - 1 do //<-- hier, es muss - 1 heißen oder besser gleich mit Low und High arbeiten for j:=0 to 25 do Result[i,j]:=0; for k:=0 to keylength-1 do begin //für den 1. Schlüssel, 2. Schlüssel, etc. Teilstrings erstellen teilchiffre:=getCharsAt(k,keylength,chiffre); for i:=1 to length(teilchiffre) do Result[k,ord(teilchiffre[i])-65]:=Result[k,ord(teilchiffre[i])-65]+1; end; end; |
Re: Sehr komischer Fehler beim Beenden der Schleife...
Aalso ich bedanke mich recht herzlich! das hat geklappt!
Da sieht man wieder wie groß der Wert eines übersichtlichen Quelltextes ist (kleiner Wink an meinen Partner der den Code nämlich eig. geschrieben hat und nur nicht in das Forum konnte ;) ) |
Re: Sehr komischer Fehler beim Beenden der Schleife...
Zitat:
Und werfe noch den Hinweis auf Styleguides hinterher. :???: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz