[Lazarus] TTreeView, string and SIGSEGV

Martin lazarus at mfriebe.de
Fri Aug 23 18:03:03 CEST 2013

On 23/08/2013 16:13, Xiangrong Fang wrote:
> Hi All,
> I encountered a strange SIGSEGV with the attached program.  To 
> reproduce the problem:
> 1) compile and run it.
> 2) select "Node #2"
> 3) click "Test" button, it will insert a node before the selected Node
> 4) close the program
> There will be a SIGSEGV at the end of OnDestroy method.
> This problem is reproducible under Linux amd64 and Wine and Win7 
> (32bit). A strange thing is that on Linux or Wine, this error only 
> occur on Node #1 and Node #2, but on Windows, it only occur on Node #2 
> and Node #3.
> Also, if you swap either of the 2 commented statements, this error is 
> gone.
> I suspect this is caused by the AnsiString manager.  Could anyone 
> explain why, or is this a bug?

Only had a quick look, please veryfy....

  Move(tv.Selected.Data^, p^, SizeOf(TNode));
   tv.Items.InsertObject(tv.Selected, 'New Node', p);

Move makes a copy of the node, including a copy of the ansistring (that 
is the pointer-part) in the node.
so now you have 2 strings, referring the same string data, but you never 
increased the ref count.

More information about the Lazarus mailing list