Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Access Violation, beim schreiben auf Variable


Delete - Sa 05.08.06 20:19
Titel: Access Violation, beim schreiben auf Variable
tja, mal wieder ratlos, huntermal die gleiche procedure geschrieben, doch jetzt mag Delphi nicht mehr... wahrscheinlich steh ich einfach auf dem schlauch. weshalb bringt er in der zeile 10, eine (schreib-)zugriffsverletzung? der record wurde ordnungsgemäss auf den heap initialisiert und der variablen "rec" zugewiesen. die datenabfrage und zuweisung funktioniert ein paar cm. weiter prima... weshalb krachts? :gruebel:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure tDefDB.GetS(const X: tList);
var
 i: integer;                        //laufvariable
 rec: pDataRec;                     //rückgabestruktur als pointer
begin
 for i := 0 to LS.Count - 1 do      //gehe Liste durch
 begin                              //für jedes Listelement
  new(rec);                         //reserviere speicher
  fillchar(rec^, sizeof(rec^), #0); //initalisiere spreicher
  rec^.LK   := pRec(LS)^.S;         // <-- Access Violation
  rec^.Desc := pRec(LS)^.Desc;      //weise wert zu
  X.Add(rec);                       //hänge in an die andere TList an, zur Rückgabe
 end;
end;


Delete - Sa 05.08.06 20:26

tja, hat sich erledigt, hab die laufvariable vergessen. sorry.

So funktionierts...

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure tDefDB.GetS(const X: tList);
var
 i: integer;                        //laufvariable
 rec: pDataRec;                     //rückgabestruktur als pointer
begin
 for i := 0 to LS.Count - 1 do      //gehe Liste durch
 begin                              //für jedes Listelement
  new(rec);                         //reserviere speicher
  fillchar(rec^, sizeof(rec^), #0); //initalisiere spreicher
  rec^.LK   := pRec(LS[i])^.S;      //weise wert zu
  rec^.Desc := pRec(LS[i])^.Desc;   //weise wert zu
  X.Add(rec);                       //hänge in an die andere TList an, zur Rückgabe
 end;
end;