[Lazarus] TTreeView, string and SIGSEGV
Xiangrong Fang
xrfang at gmail.com
Mon Aug 26 10:45:35 CEST 2013
Ok, that's reasonable, however:
1) If I use Move() is there a "manual" way to increate the string ref count?
2) why the error is gone if I change this line:
prev := tv.Items.InsertObjectBehind(prev, p^.title, p);
to this:
prev := tv.Items.InsertObjectBehind(prev, 'Node #' + IntToStr(i), p);
3) Why this error does not happen on node #0 and #3, but only node #1 and
#2?
4) Why it behaves different on Windows and Linux?
Thanks!
2013/8/24 Martin <lazarus at mfriebe.de>
> 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.
>
>
>
>
> --
> ______________________________**_________________
> Lazarus mailing list
> Lazarus at lists.lazarus.**freepascal.org<Lazarus at lists.lazarus.freepascal.org>
> http://lists.lazarus.**freepascal.org/mailman/**listinfo/lazarus<http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20130826/6a699304/attachment-0003.html>
More information about the Lazarus
mailing list