1
procedure freeMem (var v: tTabla; i: integer);
var
p : tPEntero;
begin
for p in v do
    if p^ < i then
        begin
        dispose(p);
        p := NIL;
        end;
writeln('Memory disposed.');
end;

この整数を指す 4 つのポインターの配列があります。

[1、2、3、4]

メインプログラムではfreeMem(table, 2);、メソッドを呼び出したときに期待される結果が次のようになることを意味するプロシージャを呼び出しwriteTable(table);ます。

[なし、2、3、4]

しかし、得られた結果は次のとおりです。

[12800、2、3、4]

基本的に、ポインターを破棄したランダムな値。

 

手順を変更してfreeMem(v, i)a を使用しない場合、for -- in -- do何らかの形で機能する場合、逆に機能しない理由を知りたい

procedure freeMem (var v: tTabla; i: integer);
var
indice: integer;
begin
for indice:=1 to MAX do
    if v[indice]^ < i then
        begin
        dispose(v[indice]);
        v[indice] := NIL;
        end;
writeln('Memory disposed.');
end;
4

0 に答える 0