[Mono-dev] PtrToStructure, FreeHGlobal, then access to the structure
Andy Hume
andyhume32 at yahoo.co.uk
Tue Aug 19 10:33:56 EDT 2008
Thanks Robert. Makes sense in hindsight, that the managed struct is a copy
of the native source (the native struct being copied onto the managed
struct's memory IIUC)! Thus one bug report only (#417256 in Win32
Printing).
Andy
Robert Jordan wrote:
>
> Andy Hume wrote:
>> In the class library I see a few pieces of code like the following. Am I
>> correct in thinking that code like this is bad?
>
> Only if the .Name ptr is pointing to a memory block inside the
> struct's area. So it depends on the specification of the
> struct being marshaled.
>
>> info = Marshal.PtrToStructure (ptr, ...);
>> Marshal.FreeHGlobal (ptr);
>> // now we access the structure
>> int id = info.Id;
>> string name = Marshal.PtrToStringUni (info.Name);
>>
>> Since the structure might contain only blittable types then the structure
>> reference may simply be to the native memory and not to a managed copy?
>> So
>> accessing a field there is accessing free'd memory...
>
> IntPtrs are blittable.
>
> Robert
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
>
--
View this message in context: http://www.nabble.com/PtrToStructure%2C-FreeHGlobal%2C-then-access-to-the-structure-tp18940257p19050896.html
Sent from the Mono - Dev mailing list archive at Nabble.com.
More information about the Mono-devel-list
mailing list