Andreas_Sans - Mi 06.08.03 20:00
Titel: Ungültige Zweigeroperation
Wenn ich auf einen Button auf dem ersten Formblatt drücke, meint Delphi es hätte eine Ungültige Zeigeroperation stattgefunden.
Hier der Quellcode :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94:
| hin[1] := 'Aa'; hin[2] := 'Bb'; hin[3] := 'Cc'; hin[4] := 'Dd'; hin[5] := 'Ee'; hin[6] := 'Ff'; hin[7] := 'Gg'; hin[8] := 'Hh'; hin[9] := 'Ii'; hin[10] := 'Jj'; hin[11] := 'Kk'; hin[12] := 'Ll'; hin[13] := 'Mm'; hin[14] := 'Nn'; hin[15] := 'Oo'; hin[16] := 'Pp'; hin[17] := 'Qq'; hin[18] := 'Rr'; hin[19] := 'Ss'; hin[20] := 'Tt'; hin[21] := 'Uu'; hin[22] := 'Vv'; hin[23] := 'Ww'; hin[24] := 'Xx'; hin[25] := 'Yy'; hin[26] := 'Zz'; hin[27] := '1'; hin[28] := '2'; hin[29] := '3'; hin[30] := '4'; hin[31] := '5'; hin[32] := '6'; hin[33] := '7'; hin[34] := '8'; hin[35] := '9'; hin[36] := '0';
zurck[1] := 'Jj'; zurck[2] := 'Ff'; zurck[3] := 'Hh'; zurck[4] := 'Nn'; zurck[5] := 'Aa'; zurck[6] := 'Rr'; zurck[7] := 'Gg'; zurck[8] := 'Kk'; zurck[9] := 'Xx'; zurck[10] :='Pp'; zurck[11] :='Ee'; zurck[12] :='Yy'; zurck[13] :='Qq'; zurck[14] :='Uu'; zurck[15] :='Tt'; zurck[16] :='Dd'; zurck[17] :='Oo'; zurck[18] :='Ll'; zurck[19] :='Bb'; zurck[20] :='Ww'; zurck[21] :='Ss'; zurck[22] :='Ii'; zurck[23] :='Mm'; zurck[24] :='Zz'; zurck[25] :='Vv'; zurck[26] :='Cc'; zurck[27] :='5'; zurck[28] :='9'; zurck[29] :='2'; zurck[30] :='7'; zurck[31] :='6'; zurck[32] :='1'; zurck[33] :='4'; zurck[34] :='0'; zurck[35] :='3'; zurck[36] :='8';
decoder := ''; bester := ''; beste := ''; filename := 'C:\Eigene Dateien\anfang.doc'; LoadStringFromFile(filename,loadstring); decoder := loadstring; decodierung(decoder,hin,zurck,bester,beste); form4.label4.caption := beste + ' Sekunde(n)'; form4.label6.caption := bester;
decoder := ''; bester := ''; beste := ''; filename := 'C:\Eigene Dateien\fortgeschritt.doc'; LoadStringFromFile(filename,loadstring); decoder := loadstring; decodierung(decoder,hin,zurck,bester,beste); form4.label5.caption := beste + ' Sekunde(n)'; form4.label7.caption := bester; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
| procedure LoadStringFromFile(Filename: string; var LoadString: string); var fs:TFileStream; begin fs:=TFileStream.Create(filename, fmOpenRead or fmShareDenyNone); SetLength(LoadString, fs.Size); if fs.size>0 then fs.Read(LoadString[1], fs.Size); fs.Free; end;
procedure decodierung(decoder : string; hin : array of string; zurck : array of string; var bester : string; var beste : string); var i,j,o : integer; uber,uber2 : string; zahl : boolean; begin zahl := false; i := length(decoder); for j := 1 to i do begin
if zahl = false then begin
for o := 0 to 36 do begin uber := hin[o]; uber2 := zurck[o];
if decoder[j] = uber2[2] then begin bester := bester + uber[2]; end; if decoder[j] = uber2[1] then begin bester := bester + uber[1]; end end; if decoder[j] = ' ' then begin bester := bester + ' '; end; if decoder[j] = #13 then begin zahl := true; end; end;
if zahl = true then begin for o := 26 to 36 do begin if decoder[j] = zurck[o] then begin beste := beste + hin[o]; end end; end; end; end; |
kann mir jemand helfen ?
Keldorn - Mi 06.08.03 21:53
Hallo
hin sind dynamische array , poste mal bitte wo du setlenght aufgerfufen hast
ich vermute mal: setlength(hin,36);
richtig in deinem falle wäre so
Delphi-Quelltext
1: 2:
| setlength(hin,37); setlength(zurck,37); |
dynamische array beginnen bei 0, nicht bei 1, somit sind es 37 Einträge, nicht 36.
mit hin[36] wärst du bei setlength(hin,36) beim 37. Eintrag und damit außerhalb vom reserviertem speicher, der gurnd für die ungültige Zeigerop. beim setzen kommt sie evtl nicht, aber beim auslesen.
von der sache ist
ein verschenkter platz, und hier wird es weiter krachen
| Zitat: |
procedure decodierung(decoder : string; hin : array of string; zurck : array of string; var bester : string; var beste : string);
var i,j,o : integer;
uber,uber2 : string;
zahl : boolean;
begin
zahl := false;
i := length(decoder);
for j := 1 to i do begin
if zahl = false then begin
for o := 0 to 36 do begin //// ********* 1 )
uber := hin[o]; // 2)
uber2 := zurck[o]; // 2)
if decoder[j] = uber2[2] then begin
|
1) du willst bestimmt von 1 beginnen nicht von 0,
hin[0] ist '' belegt und wenn du noch im Shcleifendurchlauf o:=0 drin hast kracht es selbst bei uber[2] und uber2[1], weil gar kein 1. oder 2. Zeichen im string ist
Mfg Frank