fork download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. class C1 {
  6. public:
  7. C1() { cout<<" C1 object constructed"<<endl; }
  8. ~C1() { cout<<" C1 object destroyed"<<endl; }
  9. };
  10. class C2 {
  11. public:
  12. C2() { cout<<" C2 object constructed"<<endl; }
  13. ~C2() { cout<<" C2 object destroyed"<<endl; }
  14. };
  15.  
  16. int main(void) {
  17. cout<<"Normal array"<<endl;
  18. C1 *p = new C1[2];
  19. delete[] p; // arrayed delete for arrayed new
  20. cout<<"Everything was fine !"<<endl<<endl;
  21.  
  22. cout<<"Array into a good vector"<<endl;
  23. {
  24. vector<C1*> v;
  25. v.push_back(new C1[2]); // array of doubles
  26. for (auto &x:v)
  27. delete[]x;
  28. v.clear();
  29. } // vector deceases here
  30. cout<<"Everything is fine"<<endl<<endl;
  31.  
  32. cout<<"Going via a void*"<<endl;
  33. std::vector<void*> data;
  34. data.push_back(new C1[2]); // array of doubles
  35. // data.push_back(new C2[2]); // array of shorts
  36. for (auto &x:data)
  37. delete[]x;
  38. data.clear();
  39. cout<<"OUCH !!!"<<endl;
  40. return 0;
  41. }
  42.  
Runtime error #stdin #stdout #stderr 0s 15248KB
stdin
Standard input is empty
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]