Ich bin gerade dabei, für die Schule eine kleine Datenbank zu schreiben. Leider funktioniert eine Methode nicht so, wie sie sollte. Ich habe bestimmt eine halbe Stunde lang versucht, herauszufinden, woran es liegt. So langsam glaube ich schon, es handelt sich um einen Bug in Delphi.
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: 95: 96: 97: 98: 99: 100: 101: 102:
| unit SaveStructs;
interface
uses SysUtils;
type
Integers = array of Integer;
PPartner = ^TPartner; TPartner = record Name, Vorname: string; Klasse: string;
Sponsoring: string; Praktikumsplatz: Boolean;
Nachhilfe: record Fach: string; StundenProWoche: Byte; end;
Unterstuetzung: record Schulfest: Boolean; Klassenfahrt: Boolean; Unterrichtsbeitrag: Boolean; EDV: Boolean; end;
Organisation: Byte; Bibliotheksaufsicht: Byte; Suchtberatung: Byte; Rechtskunde: Byte; Handwerk: string;
ExperteFuer: string;
Sonstiges: string; end;
PListElm = ^TListElm; TListElm = record Partner: PPartner; Next: PListElm; end;
TPartnerList = class private First: PListElm; Curr: PListElm; CurrID: Integer; public procedure Add(const Partner: TPartner); end;
implementation
procedure TPartnerList.Add(const Partner: TPartner); var AddAfter, AddBefore: PListElm; New: PListElm; begin GetMem(New, SizeOf(TListElm)); GetMem(New^.Partner, SizeOf(TPartner)); New^.Partner^ := Partner;
if First <> nil then begin AddAfter := First; AddBefore := AddAfter^.Next; while (AddBefore <> nil) and Priority(AddBefore^.Partner^, Partner) do begin AddAfter := AddBefore; AddBefore := AddBefore^.Next; end; New^.Next := AddBefore; AddAfter^.Next := New; end else begin New^.Next := nil; First := New; end; end;
end. |
Wenn die Methode Add aufgerufen wird, tritt in der dritten Zeile (Zeile 74 des Codes) der Methode ein Fehler wegen Zugriffsverletzung auf.
Die Variable New^.Partner^ soll zu diesem Zeitpunkt undefiniert sein. Mit Ausnahme von
Name und
Vorname sind aber alle ihre Elemente definiert. Ich frage mich, wie das gehen soll.
Ich programmiere jetzt schon seit einigen Jahren mit Delphi, aber so etwas ist mir noch nicht begegnet.
Würde mich freuen, wenn jemand Rat weiß.
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt