Wireshark-dev: Re: [Wireshark-dev] Memory Leak

Date: Wed, 25 Mar 2009 14:22:48 +0000
Hmm, we'll this is the first time i am working with memory and am just learning all about it. In those examples they seem to allocate and free in the same function, but i cant do that. In my dll i have one function that allocates memory and passes a char * back to the dissector to set a variable with it, then i have another function that frees it in the dll (pass it the char * and free it with free((void *)variable);) but that also gives me an error, so i'm not sure how and where to free the memory.

Greg


---- Gianluca Varenni <gianluca.varenni@xxxxxxxxxxxx> wrote: 

=============
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: <gogrady@xxxxxxxxx>
To: <wireshark-dev@xxxxxxxxxxxxx>
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 <wireshark-dev@xxxxxxxxxxxxx>
> Archives:    http://www.wireshark.org/lists/wireshark-dev
> Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
>             mailto:wireshark-dev-request@xxxxxxxxxxxxx?subject=unsubscribe 

___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev@xxxxxxxxxxxxx>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-request@xxxxxxxxxxxxx?subject=unsubscribe