Forum > General
[NOT Solved] specialize TFPGObjectList<T>
BrunoK:
Lazarus 3.99 (rev Unknown) FPC 3.2.2 x86_64-win64-win32/win64
In the following program
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---program Project1; {$mode ObjFPC}{$H+} uses Classes, SysUtils, fgl; const cSymInvalid = low(integer); type { TSymbolItem } TSymbolItem = class(TObject) private fSym: integer; {~bk} public procedure Clear; property Sym: integer read fSym write fSym; {file position of symbol} end; {TSymbolItem} { TSymbolBufferList - circular buffer list } TSymbolBufferList = class(specialize TFPGObjectList<TSymbolItem>) private const cCap = 16; private FHead, // Index offset of the oldest Symbol FCurr, // " " of CurrentSymbol FTail: integer; // Index offset of the newest Symbol function LL0Get: TSymbolItem; function LLGet(k: Integer): TSymbolItem; protected public constructor Create; procedure Clear; property LL[k: Integer]: TSymbolItem read LLGet; property LL0: TSymbolItem read LL0Get; end; { TSymbolItem } procedure TSymbolItem.Clear; begin fSym := cSymInvalid; end; { Clear } { TSymbolBufferList } constructor TSymbolBufferList.Create; var i: integer; lNewSymPos: TSymbolItem; begin inherited; // WriteLn(HexStr(List)); // Checked : .List has a valid pointer for i := 0 to cCap - 1 do begin lNewSymPos := TSymbolItem.Create; lNewSymPos.Clear; Add(lNewSymPos); // <<<<<<<<------------- ERROR HERE end; end; procedure TSymbolBufferList.Clear; begin FHead := 0; FCurr := 0; FTail := 0; end; function TSymbolBufferList.LL0Get: TSymbolItem; begin if FTail = FCurr then Exit(nil) else Exit(Items[FCurr]); end; { Returns nil if no valid SymbolPosition for k } function TSymbolBufferList.LLGet(k: Integer): TSymbolItem; begin { ... Code ... } end; var vSymbolBufferList: TSymbolBufferList;begin vSymbolBufferList := TSymbolBufferList.Create; vSymbolBufferList.Free; ReadLn;end.
I get :
--- Quote ---Project project1 raised exception class 'External: ACCESS VIOLATION' with message:
Access violation writing to address $0000000000000000.
In file 'fgl.pp' at line 1067
--- End quote ---
What is wrong in this little test program.
BrunoK:
This program compiles !
BrunoK:
Kind of bug in FPC, both 3.2.2 and trunk preparing a PATCH.
BrunoK:
Solved, patch submitted to fpc GIT.
BrunoK:
Sadly patch gives trouble due to compiler having difficulties knowing what constructor to call ....
Navigation
[0] Message Index
[#] Next page