On Jul 30, 7:24 am, Ian Collins <ian-n...@hotmail.com> wrote:
Roy wrote:
On Jul 30, 9:00 am, Ian Collins <ian-n...@hotmail.com> wrote:
royash...@gmail.com wrote:
// Destructor
~cpchk(){
cout<<"Destructor called"<<endl;
if(name!=0)
free(name);
}
a=b;
Heres the code i am talking about , Kindly comment .
Two serious errors:
You attempt to free name twice (why the check for 0?), whether or not it
was allocated by malloc.
--
Ian Collins.
Hi Ian ,
I have checked for 0 , as in the constructor i equate the pointer to
0 , that way my program knows how to check
against freeing a pointer not allocated memory .
Freeing NULL is a no-op, so you don't have to check.
In your case, you have no way of telling whether the name points to
dynamic memory.
I didn't get your point of freeing name twice . There are two
different Objects in the program . Both need to
have their memory freed ?
Once you assign one to the other, both have a name pointer pointing to
the same address. Try printing the pointer value in your destructor.
--
Ian Collins.
I that one of the problems is in the following function:
// Methods for name
char* getname()const{
cout<<"Address:Name>>"<<&name<<endl;
return name;
}
You print the pointer to pointer to name and not the actual value of
the pointer.
If you change this line: cout<<"Address:Name>>"<<&name<<endl;
to this line: cout<<"Address:Name>>"<<(void*)name<<endl;
you will get the following output:
Constructor called
Constructor called
Before Assignent
Object A
0012FF50
Address:Name>>00356328
Hitesh
Address:Num>>0012FF54
10
Object B
0012FF40
Address:Name>>00356370
Rajesh
Address:Num>>0012FF44
30
After Assignent
Object A
0012FF50
Address:Name>>00356370
Rajesh
Address:Num>>0012FF54
30
Object B
0012FF40
Address:Name>>00356370
Rajesh
Address:Num>>0012FF44
30
Press any key to continue . . .
Destructor called
Destructor called
After the copy operation the name addresses are the same. This is what
you have expected, not ?
actually printing the pointer to a pointer .
same :-) .
continuing with the initialization list this code compiles okay and runs fine but does it create a memory leak ?