Re: memory leak?

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance



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.


.



Relevant Pages

  • Re: sizeof(ptr) = ?
    ... The value returned by malloc() is of type 'void*', ... The memory is typeless until an object has been written ... Since 'void' is defined to be an incomplete ... an lvalue of a complete type, there must be a pointer conversion ...
    (comp.lang.c)
  • Re: memory allocation wrapper
    ... I've written a wrapper for malloc and friends. ... The reason for doing writing this so that newbies ... How do I know how much memory a pointer points to? ...
    (comp.lang.c)
  • Re: 2D array of structures
    ... Don't cast the return value of malloc(), ... you allocate here memory for 7 such structures. ... a pointer to the start of this memory, which is of type 'STRUCTURE *' ...
    (comp.lang.c)
  • Re: malloc does not return null when out of memory
    ... >> malloc() when the overcommitted memory is touched, ... >> touched it and there's no actual memory there. ... This patch does ... > 1) mallocreturning a pointer, and then sometime later the program dies ...
    (freebsd-stable)
  • Re: Difference between Macro and Function...
    ... > | Look up the library documentation; malloc is used to request memory space ... using a pointer to freemakes sense. ... that share a single region of memory. ...
    (comp.lang.c)