0

I have read most of the posts here on invalid pointer operations in Delphi and they don't seem to apply to this case... Trial and error led me to the line with the problem but it doesn't make any sense to me. In this example, a dynamic array of records is populated with the contents of a text file as it parses it. Everything works perfectly except when the memory allocated to the dynamic array is released - in that case I receive an "Invalid Pointer Operation". When I change the line in question from an ifthen statement to a classic if-then, it works.

My question is simple: Why does the first one cause it to fail to release the memory but the but the second one succeeds?

First Example:

TempFTDB[ci].FTText := ifthen(TempHolder = '', '', TempHolder + #13#10) + lr;

Second Example:

if tempholder = '' then
    TempFTDB[ci].FTText := lr
else
    TempFTDB[ci].FTText := tempholder + #13#10 + lr;

The line that releases the memory is:

TempFTDB := nil;

Further clarification: TempFTDB is a local variable and there are no other lines that free it's memory. It is on the "TempFTDB := nil" line that the error occurs.

4

2 に答える 2

0

わかりました...上記は赤いニシンのようなものでした。上記のルーチン(上記で抜粋)を2回実行すると、エラーが再発しました。確かに、未割り当てのメモリのように聞こえます...上記のコードの直前に、レコードの一時配列内のアイテムの番号を付け直すルーチンがあり、その中には問題...(恥ずかしい小さな間違い..)

私が持っていた:

for i := 0 to length(FTDBFileBuffer_RTF) do
  begin
    FTDBFileBuffer_RTF[i].RecordNo := NewRecordNumber;
  end;

それ以外の

for i := 0 to length(FTDBFileBuffer_RTF) - 1 do //notice the - 1
  begin
    FTDBFileBuffer_RTF[i].RecordNo := NewRecordNumber;
  end;

現在、問題は単なる学術的なものです... ifthenコマンドの有無により、エラーが表示されるのはなぜですか

于 2012-05-08T04:38:16.457 に答える
0

通常、IfThen を使用するときにこの種の問題が発生するのは、メソッド シグネチャでわかるように、IfThen メソッドが 2 つの文字列を想定しているためです。

function IfThen(AValue: Boolean; const ATrue: string; AFalse: string = ''): string;

あなたが投稿したコードが実際のコードであるかどうかはわかりませんが、「False」値が間違った状態にあり、IfThen メソッドは常に両方の条件を実行すると推測できます。

そのため、「False」値でメソッドを渡し、このメソッドが実行される条件が false であることに依存している場合、常に実行されるため、予期しない動作が発生する可能性があります。

于 2012-05-07T16:08:21.283 に答える