J'ai un souci dans une application C++ sous Linux.

J'ai ce genre d'erreurs avec gdb :

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1211122768 (LWP 24151)]
0xb7d61543 in free () from /lib/tls/i686/cmov/libc.so.6
(gdb) bt
#0 0xb7d61543 in free () from /lib/tls/i686/cmov/libc.so.6
#1 0xb7d633b1 in malloc () from /lib/tls/i686/cmov/libc.so.6
#2 0xb7f124c5 in operator new () from /usr/lib/libstdc++.so.6
#3 0xb7f125fc in operator new[] () from /usr/lib/libstdc++.so.6
Une ligne typique qui fait ce genre d'erreurs :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
char * buffer = new char[bufLen];
J'ai v�rifi�, les dimensions sont OK (de l'ordre d'une centaine d'octets). Le seul truc un peu "sp�cial" de mon appli, c'est simplement que tout s'ex�cute dans un nouveau thread que je cr�e ainsi :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
    // Create the thread
    int err = pthread_create(&m_pThreadRecv, NULL, threadRecvProc, this);
 
    if (err != 0)
    {
        cerr << "pthread_create() failed (error " << err << ")." << endl;
        return false;
    }
Si je ne m'abuse, la m�moire par d�faut pour un thread c'est 8 Mo non ? enfin bref c'est largement sup�rieur � 100 octets, je comprend vraiment pas pourquoi un b�te new[] peut tout faire planter...

EDIT:

J'ai le m�me souci avec delete[] :

*** glibc detected *** double free or corruption (!prev): 0x080e7588 ***

Program received signal SIGABRT, Aborted.
[Switching to Thread -1211245648 (LWP 24897)]
0xffffe410 in __kernel_vsyscall ()
(gdb) bt
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7d089d1 in raise () from /lib/tls/i686/cmov/libc.so.6
#2 0xb7d0a2e9 in abort () from /lib/tls/i686/cmov/libc.so.6
#3 0xb7d3c70a in __fsetlocking () from /lib/tls/i686/cmov/libc.so.6
#4 0xb7d42f74 in malloc_trim () from /lib/tls/i686/cmov/libc.so.6
#5 0xb7d432ea in free () from /lib/tls/i686/cmov/libc.so.6
#6 0xb7ef2c71 in operator delete () from /usr/lib/libstdc++.so.6
#7 0xb7ef2ccc in operator delete[] () from /usr/lib/libstdc++.so.6
Je ne fais qu'un seul free, �a c'est s�r. Mais j'ai aucune id�e de la nature de la "corruption", j'ai pasl'impression que ce soit un d�passement de tampon pourtant, j'�cris it�rativement dans le buffer et je compare � la fin l'index avec la quantit� de m�moire allou�e.