Wireshark-dev: Re: [Wireshark-dev] Memory Leak
From: "Gianluca Varenni" <[email protected]>
Date: Tue, 24 Mar 2009 10:18:33 -0700
If the memory is allocated within the DLL, it should be freed from within the DLL (i.e. you should provide a function exported by the DLL to free such memory).
Allocating memory with malloc in a DLL and free'ing it from outside the DLL 
is bad mojo.
http://msdn.microsoft.com/en-us/library/ms235460(VS.80).aspx

Have a nice day
GV

----- Original Message ----- From: <[email protected]>
To: <[email protected]>
Sent: Tuesday, March 24, 2009 9:57 AM
Subject: [Wireshark-dev] Memory Leak


Hi all,

So in my dissector, i call a dll that allocates memory for information to be returned back for output, but when i try and free the memory, i get an error. I was wondering what the scope of the memory would be and where i should free it, maybe i'm freeing it wrong. I allocate it in my dll after if(tree) and free it at the end of the if statement. This is how i allocate:
char * change = (char *)malloc(string.GetLength()+1);
memset(change,0,string.GetLength()+1);
::strncpy_s(change, string.GetLength()+1, string, string.GetLength());
return change;

and i just want to use free(variable); but i get:

HEAP[wireshark.exe]: Invalid Address specified to RtlFreeHeap( 027E0000, 05E8F998 )
Windows has triggered a breakpoint in wireshark.exe.

This may be due to a corruption of the heap, which indicates a bug in wireshark.exe or any of the DLLs it has loaded.
This may also be due to the user pressing F12 while wireshark.exe has 
focus.
The output window may have more diagnostic information.

pointing to the:
::strncpy_s(change, string.GetLength()+1, string, string.GetLength());
line

Thanks for any help,

Greg
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <[email protected]>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
mailto:[email protected]?subject=unsubscribe