Announcement

Collapse
No announcement yet.

Ungültige Parameterübergabe mit overloaded procedures

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ungültige Parameterübergabe mit overloaded procedures

    <pre>

    procedure Test(const A: array of Integer; B: Integer = 0); overload;
    begin
    WriteLn( Length(A) );
    end;

    Test([1, 2, 3]);

    </pre>

    So wie oben immer ein offenes Array gefolgt vom einem Default Parameter in einer als overload deklarierten procedure.<br>

    Der Compiler vergisst intern den Default Parameter zu übergeben. Damit wird z.B. im obigen Beispiel 1 als Ausgabe anstatt 3 zu sehen sein.
    Viel wichtiger ist aber das der Aufrufstack der procedure also nicht korrekt erzeugt wird und somit durch eine solche procedure der komplette programstack zerstört wird und es garantiert zu hässlichen Schutzverletzungen kommen muß.<br>

    Lösungen:
    <li>auf overloading verzichten
    <li>auf default parameter verzichten und zwei overloaded procedures Test() erzeugen, also

    <pre>

    procedure Test(const A: array of Integer); overload;
    procedure Test(const A: array of Integer; B: Integer); overload;

    </pre>

    getestet unter D4/D5.

    gruß hagen
Working...
X