#include <iostream> 
#include <vector> 
using  namespace  std; 
 
class  C1 { 
public :  
    C1( )  {  cout << "  C1 object constructed" << endl;  }  
    ~C1( )  {  cout << "  C1 object destroyed" << endl;  } 
} ; 
class  C2 { 
public :  
    C2( )  {  cout << "  C2 object constructed" << endl;  }  
    ~C2( )  {  cout << "  C2 object destroyed" << endl;  } 
} ; 
 
int  main( void )  { 
	cout << "Normal array" << endl;  
	C1 * p =  new  C1[ 2 ] ; 
	delete [ ]  p;      // arrayed delete for arrayed new 
	cout << "Everything was fine !" << endl<< endl; 
 
            cout << "Array into a good vector" << endl;  
            { 
	   vector< C1* >  v;  
	   v.push_back ( new  C1[ 2 ] ) ;   // array of doubles 
	   for  ( auto  & x: v) 
	       delete [ ] x;  
	   v.clear ( ) ; 
            }  // vector deceases here 
	cout << "Everything is fine" << endl<< endl; 
 
	cout << "Going via a void*" << endl;  
	std:: vector < void * >  data; 
	data.push_back ( new  C1[ 2 ] ) ;   // array of doubles 
//	data.push_back(new C2[2]);   // array of shorts 
	for  ( auto  & x: data) 
	       delete [ ] x;  
	data.clear ( ) ; 
	cout << "OUCH !!!" << endl;  
	return  0 ; 
} 
 
 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQzEgewpwdWJsaWM6IAogICAgQzEoKSB7IGNvdXQ8PCIgIEMxIG9iamVjdCBjb25zdHJ1Y3RlZCI8PGVuZGw7IH0gCiAgICB+QzEoKSB7IGNvdXQ8PCIgIEMxIG9iamVjdCBkZXN0cm95ZWQiPDxlbmRsOyB9Cn07CmNsYXNzIEMyIHsKcHVibGljOiAKICAgIEMyKCkgeyBjb3V0PDwiICBDMiBvYmplY3QgY29uc3RydWN0ZWQiPDxlbmRsOyB9IAogICAgfkMyKCkgeyBjb3V0PDwiICBDMiBvYmplY3QgZGVzdHJveWVkIjw8ZW5kbDsgfQp9OwogCmludCBtYWluKHZvaWQpIHsKCWNvdXQ8PCJOb3JtYWwgYXJyYXkiPDxlbmRsOyAKCUMxICpwID0gbmV3IEMxWzJdOwoJZGVsZXRlW10gcDsgICAgIC8vIGFycmF5ZWQgZGVsZXRlIGZvciBhcnJheWVkIG5ldwoJY291dDw8IkV2ZXJ5dGhpbmcgd2FzIGZpbmUgISI8PGVuZGw8PGVuZGw7CgkKICAgICAgICAgICAgY291dDw8IkFycmF5IGludG8gYSBnb29kIHZlY3RvciI8PGVuZGw7IAogICAgICAgICAgICB7CgkgICB2ZWN0b3I8QzEqPiB2OyAKCSAgIHYucHVzaF9iYWNrKG5ldyBDMVsyXSk7ICAvLyBhcnJheSBvZiBkb3VibGVzCgkgICBmb3IgKGF1dG8gJng6dikKCSAgICAgICBkZWxldGVbXXg7IAoJICAgdi5jbGVhcigpOwogICAgICAgICAgICB9IC8vIHZlY3RvciBkZWNlYXNlcyBoZXJlCgljb3V0PDwiRXZlcnl0aGluZyBpcyBmaW5lIjw8ZW5kbDw8ZW5kbDsKCQoJY291dDw8IkdvaW5nIHZpYSBhIHZvaWQqIjw8ZW5kbDsgCglzdGQ6OnZlY3Rvcjx2b2lkKj4gZGF0YTsKCWRhdGEucHVzaF9iYWNrKG5ldyBDMVsyXSk7ICAvLyBhcnJheSBvZiBkb3VibGVzCi8vCWRhdGEucHVzaF9iYWNrKG5ldyBDMlsyXSk7ICAgLy8gYXJyYXkgb2Ygc2hvcnRzCglmb3IgKGF1dG8gJng6ZGF0YSkKCSAgICAgICBkZWxldGVbXXg7IAoJZGF0YS5jbGVhcigpOwoJY291dDw8Ik9VQ0ggISEhIjw8ZW5kbDsgCglyZXR1cm4gMDsKfQog
				
				 
				 
				 
				 
			 
			
				
			
			
				
	
		
		 
	
		
		  stdout 
			 
	
		Normal array
  C1 object constructed
  C1 object constructed
  C1 object destroyed
  C1 object destroyed
Everything was fine !
Array into a good vector
  C1 object constructed
  C1 object constructed
  C1 object destroyed
  C1 object destroyed
Everything is fine
Going via a void*
  C1 object constructed
  C1 object constructed
 
	 
		
	 
	
		 
	
		  stderr 
			 
	
        *** Error in `./prog': munmap_chunk(): invalid pointer: 0x00002b41157d3c58 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x70bcb)[0x2b4115126bcb]
/lib/x86_64-linux-gnu/libc.so.6(+0x76f96)[0x2b411512cf96]
./prog(+0x10cc)[0x2b41141d40cc]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf1)[0x2b41150d62b1]
./prog(+0x138a)[0x2b41141d438a]
======= Memory map: ========
2b41141d3000-2b41141d5000 r-xp 00000000 fd:00 24256514                   /home/GX9qJ4/prog
2b41141d5000-2b41141d9000 rw-p 00000000 00:00 0 
2b41141e2000-2b41141e7000 rw-p 00000000 00:00 0 
2b41143d4000-2b41143d5000 r--p 00001000 fd:00 24256514                   /home/GX9qJ4/prog
2b41143d5000-2b41143d6000 rw-p 00002000 fd:00 24256514                   /home/GX9qJ4/prog
2b41143d6000-2b41143f9000 r-xp 00000000 fd:00 6073359                    /lib/x86_64-linux-gnu/ld-2.24.so
2b41145f9000-2b41145fa000 r--p 00023000 fd:00 6073359                    /lib/x86_64-linux-gnu/ld-2.24.so
2b41145fa000-2b41145fb000 rw-p 00024000 fd:00 6073359                    /lib/x86_64-linux-gnu/ld-2.24.so
2b41145fb000-2b41145fc000 rw-p 00000000 00:00 0 
2b41145fc000-2b411476e000 r-xp 00000000 fd:00 7235085                    /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22
2b411476e000-2b411496e000 ---p 00172000 fd:00 7235085                    /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22
2b411496e000-2b4114978000 r--p 00172000 fd:00 7235085                    /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22
2b4114978000-2b411497a000 rw-p 0017c000 fd:00 7235085                    /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22
2b411497a000-2b411497e000 rw-p 00000000 00:00 0 
2b411497e000-2b4114a81000 r-xp 00000000 fd:00 6073388                    /lib/x86_64-linux-gnu/libm-2.24.so
2b4114a81000-2b4114c80000 ---p 00103000 fd:00 6073388                    /lib/x86_64-linux-gnu/libm-2.24.so
2b4114c80000-2b4114c81000 r--p 00102000 fd:00 6073388                    /lib/x86_64-linux-gnu/libm-2.24.so
2b4114c81000-2b4114c82000 rw-p 00103000 fd:00 6073388                    /lib/x86_64-linux-gnu/libm-2.24.so
2b4114c82000-2b4114c98000 r-xp 00000000 fd:00 6073326                    /lib/x86_64-linux-gnu/libgcc_s.so.1
2b4114c98000-2b4114e97000 ---p 00016000 fd:00 6073326                    /lib/x86_64-linux-gnu/libgcc_s.so.1
2b4114e97000-2b4114e98000 r--p 00015000 fd:00 6073326                    /lib/x86_64-linux-gnu/libgcc_s.so.1
2b4114e98000-2b4114e99000 rw-p 00016000 fd:00 6073326                    /lib/x86_64-linux-gnu/libgcc_s.so.1
2b4114e99000-2b4114eb1000 r-xp 00000000 fd:00 6073345                    /lib/x86_64-linux-gnu/libpthread-2.24.so
2b4114eb1000-2b41150b0000 ---p 00018000 fd:00 6073345                    /lib/x86_64-linux-gnu/libpthread-2.24.so
2b41150b0000-2b41150b1000 r--p 00017000 fd:00 6073345                    /lib/x86_64-linux-gnu/libpthread-2.24.so
2b41150b1000-2b41150b2000 rw-p 00018000 fd:00 6073345                    /lib/x86_64-linux-gnu/libpthread-2.24.so
2b41150b2000-2b41150b6000 rw-p 00000000 00:00 0 
2b41150b6000-2b411524b000 r-xp 00000000 fd:00 6073482                    /lib/x86_64-linux-gnu/libc-2.24.so
2b411524b000-2b411544a000 ---p 00195000 fd:00 6073482                    /lib/x86_64-linux-gnu/libc-2.24.so
2b411544a000-2b411544e000 r--p 00194000 fd:00 6073482                    /lib/x86_64-linux-gnu/libc-2.24.so
2b411544e000-2b4115450000 rw-p 00198000 fd:00 6073482                    /lib/x86_64-linux-gnu/libc-2.24.so
2b4115450000-2b4115454000 rw-p 00000000 00:00 0 
2b41157c1000-2b41157f3000 rw-p 00000000 00:00 0                          [heap]
7ffdf2554000-7ffdf2575000 rw-p 00000000 00:00 0                          [stack]
7ffdf258c000-7ffdf258e000 r-xp 00000000 00:00 0                          [vdso]
7ffdf258e000-7ffdf2590000 r--p 00000000 00:00 0                          [vvar]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]