나는 델파이에서 유효하지 않은 포인터 연산에 관한 대부분의 게시물을 읽었으며이 경우에는 적용되지 않는 것으로 보인다 ... 재판과 오류로 인해 문제가되는 줄을 알게되었지만 아무런 의미가 없다. 나를. 이 예제에서는 텍스트 파일을 구문 분석 할 때 텍스트 파일의 내용으로 동적 레코드 배열을 채 웁니다. 동적 배열에 할당 된 메모리가 해제 될 때를 제외하고 모든 것이 완벽하게 작동합니다.이 경우 "잘못된 포인터 연산"이 수신됩니다. 문제의 라인을 ifthen 구문에서 고전적인 if-then으로 변경하면 작동합니다.델파이 XE에서 잘못된 포인터 연산 - IFTHEN 때문에?
내 질문은 간단합니다. 왜 첫 번째 메모리가 메모리를 해제하지 못하게하지만 두 번째 메모리가 성공합니까?
제 1 예 :
TempFTDB[ci].FTText := ifthen(TempHolder = '', '', TempHolder + #13#10) + lr;
번째 예 :
if tempholder = '' then
TempFTDB[ci].FTText := lr
else
TempFTDB[ci].FTText := tempholder + #13#10 + lr;
메모리를 해제 선은 :
TempFTDB := nil;
또한 설명 : TempFTDB 로컬 변수 및 거기 메모리를 비우는 다른 라인은 없다. "TempFTDB : = nil"행에 오류가 발생합니다. IfThen 방법은 두 문자열을 기대 때문에 메서드 서명에 볼 수 IfThen을 사용하여 문제의
새 프로젝트로 이것을 복제 할 수 있습니까? –
어떤 유형이'TempFTDB'입니까? 그리고'TempFTDB : = nil' 라인에서 에러가 발생하면, FTText를 어떻게 설정해야합니까? – NGLN
@NGLN - TempFTDB는 레코드의 배열입니다. FTText는 레코드 –