Einzelnen Beitrag anzeigen

Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Zugriffsverletzung bei Zeiger auf statisches Array

  Alt 26. Aug 2019, 11:22
Delphi-Quellcode:
{ TMyClassB }

constructor TMyClassA.Create;
var
  I: Integer;
begin
  System.SetLength(FRecords, Length(RECS));
  for I := System.Low(RECS) to System.High(RECS) do
    System.Move(RECS[I], FRecords[I], SizeOf(RECS[I]));
end;

{ TMyClassB }

constructor TMyClassB.Create;
var
  I: Integer;
begin
  System.SetLength(FRecords, Length(RECS));
  for I := System.Low(RECS) to System.High(RECS) do
    System.Move(RECS[I], FRecords[I], SizeOf(RECS[I]));
end;
Genau DAS wollte ich eigentlich vermeiden. Erstens weils wieder eine Schleife wäre, zweitens weil ich dann Copy&Paste-Programmierung hätte in jeder Ableitung von TMyClass.

Deklarier TMyRecords mal so:

TMyRecords = Array[0..0] of TMyRecord;
Ein einfacher Trick um die unterschiedlichen Arraytypen anzugleichen ist die Deklaration so zu ändern:
Delphi-Quellcode:
type
  TMyRecords = array[0..100] of TMyRecord;
In beiden Fällen erhalte ich nun Kompilerfehler:
Delphi-Quellcode:
  TMyClassB = class(TMyClass)
  strict private const
    RECS: array[0..1] of TMyRecord = (
      (A: 1; B: 2; C: 3),
      (A: 4; B: 5; C: 6),
      (A: 7; B: 8; C: 9)
    ); //<-- "Anzahl der Elemente (3) weicht von der Deklaration (2) ab"
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat