Wireshark-dev: Re: [Wireshark-dev] Memory Leak
From: Andy Lawman <[email protected]>
Date: Wed, 25 Mar 2009 15:15:31 +0000

Isn't your DLL written in C++? You're not mixing new & free are you? Storage got with new must be returned with delete, new [ ] with delete [ ] but only malloc() with free().

Andy.  



<[email protected]>
To
Developer support list for Wireshark <[email protected]>
cc
bcc
Subject
Re: [Wireshark-dev] Memory Leak


<[email protected]>

Please respond to : Developer support list for Wireshark <[email protected]>

Sent by: [email protected]  
25/03/2009 14:22




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 <[email protected]> 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: <[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

___________________________________________________________________________
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

___________________________________________________________________________
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





IMPORTANT - CONFIDENTIALITY NOTICE - This e-mail is intended only for the use of the addressee/s above.  It may contain information which is privileged, confidential or otherwise protected from disclosure under applicable laws.  If the reader of this transmission is not the intended recipient, you are hereby notified that any dissemination, printing, distribution, copying, disclosure or the taking of any action in reliance on the contents of this information is strictly prohibited.  If you have received this transmission in error, please immediately notify us by reply e-mail or using the address below and delete the message and any attachments from your system.

Amadeus Services Ltd, World Business Centre 3, 1208 Newall Road, Hounslow, Middlesex, TW6 2TA, Registered number 4040059