P
pritesh kadam
I declared derived class destructor as virtual.
CODE:
#include<iostream>
using namespace std;
class Base{ //Base class
int x; public:
Base()
{cout<<"Base Constructed\n";}
~Fred() //Base destructor not virtual
{cout<<"Base Destructed\n";}
};
class Der: public Base //Derived
{
public:
Der(){cout<<"Derived Constructor"; }
virtual ~Der() //Derived class destructor virtual
{ cout<<"Derived Destructed";}
};
int main()
{
Base *f=new Der();
delete f;
}
It gets compiled correctly. But on execution, following is o/p :
O/p
Base Constructed
Derived Constructor
Base Destructed
*** glibc detected *** ./trial: free(): invalid pointer: 0x0957b00c ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(+0x6b591)[0x19b591]
/lib/tls/i686/cmov/libc.so.6(+0x6cde8)[0x19cde8]
/lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0x19fecd]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xd9e741]
../trial[0x80487fe]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x146bd6]
../trial[0x8048701]
======= Memory map: ========
00113000-0012e000 r-xp 00000000 08:06 390404 /lib/ld-2.11.1.so
0012e000-0012f000 r--p 0001a000 08:06 390404 /lib/ld-2.11.1.so
0012f000-00130000 rw-p 0001b000 08:06 390404 /lib/ld-2.11.1.so
00130000-00283000 r-xp 00000000 08:06 394800 /lib/tls/i686/cmov/libc-2.11.1.so
00283000-00284000 ---p 00153000 08:06 394800 /lib/tls/i686/cmov/libc-2.11.1.so
00284000-00286000 r--p 00153000 08:06 394800 /lib/tls/i686/cmov/libc-2.11.1.so
00286000-00287000 rw-p 00155000 08:06 394800 /lib/tls/i686/cmov/libc-2.11.1.so
00287000-0028a000 rw-p 00000000 00:00 0
00538000-0055c000 r-xp 00000000 08:06 394808 /lib/tls/i686/cmov/libm-2.11.1.so
0055c000-0055d000 r--p 00023000 08:06 394808 /lib/tls/i686/cmov/libm-2.11.1.so
0055d000-0055e000 rw-p 00024000 08:06 394808 /lib/tls/i686/cmov/libm-2.11.1.so
0059e000-005bb000 r-xp 00000000 08:06 390462 /lib/libgcc_s.so.1
005bb000-005bc000 r--p 0001c000 08:06 390462 /lib/libgcc_s.so.1
005bc000-005bd000 rw-p 0001d000 08:06 390462 /lib/libgcc_s.so.1
008f2000-008f3000 r-xp 00000000 00:00 0 [vdso]
00ce3000-00dcc000 r-xp 00000000 08:06 262327 /usr/lib/libstdc++.so.6.0.13
00dcc000-00dcd000 ---p 000e9000 08:06 262327 /usr/lib/libstdc++.so.6.0.13
00dcd000-00dd1000 r--p 000e9000 08:06 262327 /usr/lib/libstdc++.so.6.0.13
00dd1000-00dd2000 rw-p 000ed000 08:06 262327 /usr/lib/libstdc++.so.6.0.13
00dd2000-00dd9000 rw-p 00000000 00:00 0
08048000-08049000 r-xp 00000000 08:06 137559 /home/pritesh/C/trial
08049000-0804a000 r--p 00000000 08:06 137559 /home/pritesh/C/trial
0804a000-0804b000 rw-p 00001000 08:06 137559 /home/pritesh/C/trial
0957b000-0959c000 rw-p 00000000 00:00 0 [heap]
b7600000-b7621000 rw-p 00000000 00:00 0
b7621000-b7700000 ---p 00000000 00:00 0
b77f9000-b77fb000 rw-p 00000000 00:00 0
b7809000-b780c000 rw-p 00000000 00:00 0
bf899000-bf8ae000 rw-p 00000000 00:00 0 [stack]
Aborted
pritesh@pritesh-desktop:~/C$
CODE:
#include<iostream>
using namespace std;
class Base{ //Base class
int x; public:
Base()
{cout<<"Base Constructed\n";}
~Fred() //Base destructor not virtual
{cout<<"Base Destructed\n";}
};
class Der: public Base //Derived
{
public:
Der(){cout<<"Derived Constructor"; }
virtual ~Der() //Derived class destructor virtual
{ cout<<"Derived Destructed";}
};
int main()
{
Base *f=new Der();
delete f;
}
It gets compiled correctly. But on execution, following is o/p :
O/p
Base Constructed
Derived Constructor
Base Destructed
*** glibc detected *** ./trial: free(): invalid pointer: 0x0957b00c ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(+0x6b591)[0x19b591]
/lib/tls/i686/cmov/libc.so.6(+0x6cde8)[0x19cde8]
/lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0x19fecd]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xd9e741]
../trial[0x80487fe]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x146bd6]
../trial[0x8048701]
======= Memory map: ========
00113000-0012e000 r-xp 00000000 08:06 390404 /lib/ld-2.11.1.so
0012e000-0012f000 r--p 0001a000 08:06 390404 /lib/ld-2.11.1.so
0012f000-00130000 rw-p 0001b000 08:06 390404 /lib/ld-2.11.1.so
00130000-00283000 r-xp 00000000 08:06 394800 /lib/tls/i686/cmov/libc-2.11.1.so
00283000-00284000 ---p 00153000 08:06 394800 /lib/tls/i686/cmov/libc-2.11.1.so
00284000-00286000 r--p 00153000 08:06 394800 /lib/tls/i686/cmov/libc-2.11.1.so
00286000-00287000 rw-p 00155000 08:06 394800 /lib/tls/i686/cmov/libc-2.11.1.so
00287000-0028a000 rw-p 00000000 00:00 0
00538000-0055c000 r-xp 00000000 08:06 394808 /lib/tls/i686/cmov/libm-2.11.1.so
0055c000-0055d000 r--p 00023000 08:06 394808 /lib/tls/i686/cmov/libm-2.11.1.so
0055d000-0055e000 rw-p 00024000 08:06 394808 /lib/tls/i686/cmov/libm-2.11.1.so
0059e000-005bb000 r-xp 00000000 08:06 390462 /lib/libgcc_s.so.1
005bb000-005bc000 r--p 0001c000 08:06 390462 /lib/libgcc_s.so.1
005bc000-005bd000 rw-p 0001d000 08:06 390462 /lib/libgcc_s.so.1
008f2000-008f3000 r-xp 00000000 00:00 0 [vdso]
00ce3000-00dcc000 r-xp 00000000 08:06 262327 /usr/lib/libstdc++.so.6.0.13
00dcc000-00dcd000 ---p 000e9000 08:06 262327 /usr/lib/libstdc++.so.6.0.13
00dcd000-00dd1000 r--p 000e9000 08:06 262327 /usr/lib/libstdc++.so.6.0.13
00dd1000-00dd2000 rw-p 000ed000 08:06 262327 /usr/lib/libstdc++.so.6.0.13
00dd2000-00dd9000 rw-p 00000000 00:00 0
08048000-08049000 r-xp 00000000 08:06 137559 /home/pritesh/C/trial
08049000-0804a000 r--p 00000000 08:06 137559 /home/pritesh/C/trial
0804a000-0804b000 rw-p 00001000 08:06 137559 /home/pritesh/C/trial
0957b000-0959c000 rw-p 00000000 00:00 0 [heap]
b7600000-b7621000 rw-p 00000000 00:00 0
b7621000-b7700000 ---p 00000000 00:00 0
b77f9000-b77fb000 rw-p 00000000 00:00 0
b7809000-b780c000 rw-p 00000000 00:00 0
bf899000-bf8ae000 rw-p 00000000 00:00 0 [stack]
Aborted
pritesh@pritesh-desktop:~/C$