tw1658.pp 968 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. { Source provided for Free Pascal Bug Report 1658 }
  2. { Submitted by "Luis Castedo" on 2001-10-28 }
  3. { e-mail: [email protected] }
  4. program Buggy;
  5. uses
  6. Objects, Strings;
  7. type
  8. TMyStream = object(TDosStream)
  9. m_fAutoDelete: Boolean;
  10. destructor Done; virtual;
  11. end;
  12. PMyStream = ^TMyStream;
  13. destructor TMyStream.Done;
  14. var
  15. strFName: String;
  16. F : File;
  17. begin
  18. strFName := StrPas(FName);
  19. inherited Done;
  20. if not m_fAutoDelete then
  21. Exit;
  22. Assign(F, strFName);
  23. Erase(F);
  24. end;
  25. // Global vars
  26. var
  27. pTempStream: PMyStream;
  28. EntryMem,ExitMem : Cardinal;
  29. // Main routine
  30. begin
  31. EntryMem:=MemAvail;
  32. pTempStream := nil;
  33. pTempStream := New(PMyStream, Init('tw1658.tmp', stCreate));
  34. if not Assigned(pTempStream) then
  35. Halt(1);
  36. pTempStream^.m_fAutoDelete := False;
  37. Dispose(pTempStream, Done);
  38. pTempStream := nil;
  39. ExitMem:=MemAvail;
  40. If ExitMem<EntryMem then
  41. begin
  42. Writeln('Memory lost');
  43. Halt(1);
  44. end;
  45. end.