From D struct to C struct
Namespace
rswhite4 at googlemail.com
Mon Nov 18 08:03:32 PST 2013
On Monday, 18 November 2013 at 15:27:46 UTC, Maxim Fomin wrote:
> On Monday, 18 November 2013 at 14:15:02 UTC, Namespace wrote:
>> On Monday, 18 November 2013 at 10:09:12 UTC, qznc wrote:
>>> On Monday, 18 November 2013 at 08:32:11 UTC, Namespace wrote:
>>>> I found another approach. It avoids the GC and the Heap: A
>>>> Circular Buffer:
>>>> http://dpaste.dzfl.pl/cf1e7afb
>>>>
>>>> That should work.
>>>
>>> It is unsafe, but might work in your specific case.
>>>
>>> The problem is that future changes might exhibit memory
>>> corruption, if the limit of your buffer is too low. Would
>>> probably be a hell to debug.
>>
>> Yes, but I know I never need more than 4 C pointer at the same
>> time.
>
> I think there is bigger problem (and bigger memory error) here.
> When you inside struct method load pointer to some field you
> cannot rely that after leaving the method, the pointer will be
> safe. Structs are almost often located in stack and there are
> movable, which means that struct stack 'this' pointer may
> change.
>
> There is even issue in bugzilla with example when delegate
> touches struct field and is invoked at some point later which
> causes silent memory error because delegate pointer became
> invalid.
So I should change it from C[8] to C[] = new C[8]; to be sure?
More information about the Digitalmars-d-learn
mailing list