Re: memory leak?
- From: "Tom Serface" <tom.nospam@xxxxxxxxxxxxx>
- Date: Sat, 28 Jul 2007 07:06:04 -0700
I'm glad you found the problem. There are differences between new and malloc. The biggest one is that new realizes it is allocating memory for an object and the constructor and destructor for the object are called when appropriate.
You may find this to be an interesting read:
http://wiki.answers.com/Q/What_is_the_difference_between_malloc_and_new_other_than_syntax
I almost never use malloc any more (actually I think that's never, but I almost never say never). In C++ programs new and delete is a better choice. I'm not sure why this is fixing your memory leak problem, but I think it's good for you to switch anyway and if you get the benefit of the fix then all the better.
Tom
"wanwan" <ericwan78@xxxxxxxxx> wrote in message news:1185620560.998495.188890@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
On Jul 27, 8:04 pm, "Doug Harrison [MVP]" <d...@xxxxxxxx> wrote:On Fri, 27 Jul 2007 21:33:51 -0000, wanwan <ericwa...@xxxxxxxxx> wrote:
>I ran my program is debug mode. I marked a breakpoint at the line
>free(myPtr). I found out after stepping over the line, myPtr was still
>pointing at a memory location. So free() had no effect on myPtr.
The function free() is part of the C Standard Library, and since C has only
pass-by-value, it is not possible for free(p) to modify the argument p.
That doesn't mean it didn't free the memory, though.
>One thing to note is that in my program, I used another pointer
>variable to allocate memory. Later on, the block of memory was passed
>to myPtr as a pointer. Is there a rule that requires me to free memory
>with the same pointer variable as the one I use to allocate memory? It
>looks like the case to me.
No, that's not the case. That is, this is fine:
void* p = malloc(1);
void* q = p;
free(q);
// Now p and q are considered indeterminate, and the only legal thing
// you can do with them is assign them new values.
At what time (from what function), and in what context (EXE or DLL), are
you calling free? How are you linking to MFC (static or dynamic)? What is
the exact text of the leak report (copy it out of the debugger output
window)?
--
Doug Harrison
Visual C++ MVP
I found a solution that doesn't make too much sense to me.
Originally I used malloc and free in treating the use of memory in the
char pointer like so:
char* ca = (char*) malloc(1234*sizeof(char));
...
free(ca);
.... It caused memory leak.
After playing with my code, I change to using new and delete. The
memory leak is now gone.
I thought they are the same thing. .Anyway, hope someone else can make
use of my findings.
.
- References:
- memory leak?
- From: wanwan
- Re: memory leak?
- From: Joseph M . Newcomer
- Re: memory leak?
- From: Doug Harrison [MVP]
- Re: memory leak?
- From: wanwan
- Re: memory leak?
- From: Doug Harrison [MVP]
- Re: memory leak?
- From: wanwan
- memory leak?
- Prev by Date: Re: Timer in a standard dll
- Next by Date: Re: problem with release DLL.
- Previous by thread: Re: memory leak?
- Next by thread: Re: memory leak?
- Index(es):
Relevant Pages
|