Hi,
I've together a very simple OpenGL app using GLUT on Linux that draws a few circles and bounces them around the screen. Everything works fine if I neglect to free the memory for the circles vertices using delete [] vertices when I close the app. If I DO do this, the app crashes with the following error message:
*** glibc detected *** ./OpenGL_Demo_3: double free or corruption (!prev): 0x080d01c0 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb7244d65]
/lib/tls/i686/cmov/libc.so.6(cfree+0x90)[0xb7248800]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xb740cd81]
/usr/lib/libstdc++.so.6(_ZdaPv+0x1d)[0xb740cddd]
./OpenGL_Demo_3[0x804979a]
/usr/lib/libglut.so.3(glutMainLoop+0x9f)[0xb7e907ff]
./OpenGL_Demo_3[0x80495b0]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe0)[0xb71f1050]
./OpenGL_Demo_3(__gxx_personality_v0+0xdd)[0x8049111]
======= Memory map: ========
08048000-0804b000 r-xp 00000000 08:11 32344880 /home/david/Development/OpenGL_Demo_3/OpenGL_Demo_3
0804b000-0804c000 rw-p 00002000 08:11 32344880 /home/david/Development/OpenGL_Demo_3/OpenGL_Demo_3
0804c000-08140000 rw-p 0804c000 00:00 0 [heap]
b6000000-b6021000 rw-p b6000000 00:00 0
b6021000-b6100000 ---p b6021000 00:00 0
b6139000-b613a000 rw-s 00000000 00:09 14319624 /SYSV00000000 (deleted)
b613a000-b613b000 rw-s 00000000 00:09 14286855 /SYSV00000000 (deleted)
b613b000-b633b000 rw-s 33a41000 00:0e 18307 /dev/nvidia0
b633b000-b633f000 rw-s 33a95000 00:0e 18307 /dev/nvidia0
b633f000-b643f000 rw-s 33bcb000 00:0e 18307 /dev/nvidia0
b643f000-b6440000 rw-s fdc06000 00:0e 18307 /dev/nvidia0
b6440000-b6480000 rw-s 33a37000 00:0e 18307 /dev/nvidia0
b6480000-b64a0000 rw-s 326a8000 00:0e 18307 /dev/nvidia0
b64a0000-b6507000 rw-p b64a0000 00:00 0
b6507000-b656b000 rw-p 00000000 00:0e 2836 /dev/zero
b656b000-b658e000 rw-p b656b000 00:00 0
b658e000-b65b0000 rw-s 00000000 00:09 0 /SYSV00000000 (deleted)
b65b0000-b6617000 rw-p b65b0000 00:00 0
b6617000-b661b000 r-xp 00000000 08:11 19039582 /usr/lib/libXdmcp.so.6.0.0
b661b000-b661c000 rw-p 00003000 08:11 19039582 /usr/lib/libXdmcp.so.6.0.0
b661c000-b661e000 r-xp 00000000 08:11 19039571 /usr/lib/libXau.so.6.0.0
b661e000-b661f000 rw-p 00001000 08:11 19039571 /usr/lib/libXau.so.6.0.0
b661f000-b663d000 r-xp 00000000 08:11 19039768 /usr/lib/libexpat.so.1.0.0
b663d000-b663f000 rw-p 0001e000 08:11 19039768 /usr/lib/libexpat.so.1.0.0
b663f000-b6640000 r-xp 00000000 08:11 19645643 /usr/lib/tls/libnvidia-tls.so.169.09
b6640000-b6641000 rw-p 00000000 08:11 19645643 /usr/lib/tls/libnvidia-tls.so.169.09
b6641000-b6642000 rw-p b6641000 00:00 0
b6642000-b7117000 r-xp 00000000 08:11 19039010 /usr/lib/libGLcore.so.169.09
b7117000-b7153000 rwxp 00ad4000 08:11 19039010 /usr/lib/libGLcore.so.169.09
b7153000-b7158000 rwxp b7153000 00:00 0
b7158000-b71da000 r-xp 00000000 08:11 19039506 /usr/lib/libGLU.so.1.3.070001
b71da000-b71db000 rw-p 00081000 08:11 19039506 /usr/lib/libGLU.so.1.3.070001
b71db000-b731f000 r-xp 00000000 08:11 22954955 /lib/tls/i686/cmov/libc-2.6.1.so
b731f000-b7320000 r--p 00143000 08:11 22954955 /lib/tls/i686/cmov/libc-2.6.1.so
b7320000-b7322000 rw-p 00144000 08:11 22954955 /lib/tls/i686/cmov/libc-2.6.1.so
b7322000-b7325000 rw-p b7322000 00:00 0
b7325000-b732f000 r-xp 00000000 08:11 22921283 /lib/libgcc_s.so.1
b732f000-b7330000 rw-p 0000a000 08:11 22921283 /lib/libgcc_s.so.1
b7330000-b7353000 r-xp 00000000 08:11 22954959 /lib/tls/i686/cmov/libm-2.6.1.so
b7353000-b7355000 rw-p 00023000 08:11 22954959 /lib/tls/i686/cmov/libm-2.6.1.so
b7355000-b743d000 r-xp 00000000 08:11 19040446 /usr/lib/libstdc++.so.6.0.9
b743d000-b7440000 r--p 000e8000 08:11 19040446 /usr/lib/libstdc++.so.6.0.9
b7440000-b7442000 rw-p 000eb000 08:11 19040446 /usr/lib/libstdc++.so.6.0.9
b7442000-b7449000 rw-p b7442000 00:00 0
b7449000-b745d000 r-xp 00000000 08:11 22954969 /lib/tls/i686/cmov/libpthread-2.6.1.so
b745d000-b745f000 rw-p 00013000 08:11 22954969 /lib/tls/i686/cmov/libpthread-2.6.1.so
b745f000-b7461000 rw-p b745f000 00:00 0
b7461000-b7463000 r-xp 00000000 08:11 22954958 /lib/tls/i686/cmov/libdl-2.6.1.so
b7463000-b7465000 rw-p 00001000 08:11 22954958 /lib/tls/i686/cmov/libdl-2.6.1.so
b7465000-b746c000 r-xp 00000000 08:11 22954971 /lib/tls/i686/cmov/librt-2.6.1.so
b746c000-b746e000 rw-p 00006000 08:11 22954971 /lib/tls/i686/cmov/librt-2.6.1.so
b746e000-b7482000 r-xp 00000000 08:11 19040531 /usr/lib/libz.so.1.2.3.3
b7482000-b7483000 rw-p 00013000 08:11 19040531 /usr/lib/libz.so.1.2.3.3
b7483000-b75d6000 r-xp 00000000 08:11 19287450 /usr/local/Trolltech/Qt-4.3.3/lib/libQtCore.so.4.3.3
b75d6000-b75dd000 rw-p 00152000 08:11 19287450 /usr/local/Trolltech/Qt-4.3.3/lib/libQtCore.so.4.3Aborted (core dumped)
At the start of the app, I do something like this:
Vertices = new Vectormath::Aos::Vector3[Vertex_Count];
// Fill Vertices with data
// Run app
// ...
// Cleanup - crash if I DO do this
delete [] Vertices;
I'm using Sony's vector math library, although I don't think its anything to do with the library as I experienced the same problem using my own Vertex structure.
Does anybody have any suggestions?
I've looked at many of the OpenGL Red Books sample apps, and I can't see that I've neglected anything. In my other programs that don't use OpenGL, creating/deleting dynamic memory works fine e.g. int* list = new int[100]; delete [] list;
Thanks,