[Mono-bugs] [Bug 375222] DllImported function with string return crashes Mono

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Sun Mar 30 13:49:34 EDT 2008


User jpryor at novell.com added comment

Jonathan Pryor <jpryor at novell.com> changed:

           What    |Removed                                         |Added
                 CC|                                                |jpryor at novell.com

--- Comment #8 from Jonathan Pryor <jpryor at novell.com>  2008-03-30 11:49:34 MST ---
I suspect that this will cause a memory leak on Windows, as .NET documents that
it will use CoTaskMemFree() to free the memory of the return value of functions
returning reference types.

Since ole32.dll!CoTaskMemFree() != msvcrt.dll!free(), I imagine that this would
leak the memory instead of freeing it (and that's assuming you use msvcrt.dll,
as there are many different C runtime libraries on Windows...).

If you need to return a string constant or return a pointer to dynamically
allocated memory not allocated with CoTaskMemAlloc (.NET) or g_malloc (Mono),
you should instead use System.IntPtr as the P/Invoke return type and manually
marshal and free the returned pointer:

  [DllImport (...)]
  static extern IntPtr goo ();

  static void UseGoo ()
    IntPtr p = goo ();
    string s = Marshal.PtrToStringAnsi (p);
    // Manually free `p' with the appropriate deallocation function if needed

Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.

More information about the mono-bugs mailing list