#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; }
Standard input is empty
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
*** 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]