Hallo
ich habe eine Form mit einem StringGrid. Dort schreibe ich Zahlen rein. Und die sollen, so wie sie sind in einen array of array of single.
Die IsReal ueberpruefung mache ich per exception...
Jedenfalls beim Ausmachen kommt erstmal "Invalid Pointer operation", danach eine AccesViolation und ein RuntimeError...
Aber leider weiss ich nicht woran es liegt, da ich keine Elemente zum Freigeben habe...
Ich gebe euch einfach mal den Code:
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:
| var Form1: TForm1; zahlen: array of array of Single;
implementation
{$R *.dfm}
function Uebertrag: Boolean; function IsReal(nr: string): Boolean; begin result := true; try StrToFloat(nr); except result := false; end; end; var i1, i2: Byte; begin result := true; SetLength(zahlen, Form1.StringGrid1.RowCount, Form1.StringGrid1.ColCount - 1); for i1 := 0 to Form1.StringGrid1.RowCount - 1 do for i2 := 1 to Form1.StringGrid1.ColCount - 1 do if IsReal(Form1.StringGrid1.Cells[i1, i2]) then zahlen[i1, i2] := StrToFloat(Form1.StringGrid1.Cells[i1, i2]) else Result := False; end;
procedure TForm1.Button1Click(Sender: TObject); begin if not Uebertrag then begin ShowMessage('Sie haben eine falsche Eingabe betaetigt, sie *popo*'); exit; end; end; |
Jedenfalls passiert waehrend der Prozedur kein Fehler, erst beim Ausmachen.
Woran liegt das? Bzw., welchen Speicher habe ich denn nun noch nicht freigegeben?