Considérez le code suivant:** *** glibc détectée libre(): pointeur non valide: 0x0000000000400b2c
int main()
{
char* s = (char*) malloc(sizeof(char)*10);
s="hello";
free(s);
}
Lors de l'exécution de ce programme, je reçois une erreur:
** glibc detected *** free(): invalid pointer: 0x0000000000400b2c
Mes recherches sur ce erreur indique qu'il peut être causé par ne pas attribuer suffisamment d'espace mémoire via malloc()
. Mais le programme appelle déjà malloc()
, produisant assez d'espace pour 10 char
s.
Ce n'est pas le style moderne de C++, même si C++ est valide. Ramassez [un bon livre d'introduction sur C++] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) et apprenez le bon C++. Par exemple, au lieu d'utiliser 'malloc()', vous pouvez utiliser la classe 'std :: string' largement supérieure et beaucoup plus facile à utiliser en C++. –
Juste soulignant, la question est liée à C, pas C++ – EddieBytes
@EddieBytes: la question a été étiqueté à l'origine C++ seulement. Je ne suis pas sûr d'approuver l'édition qui l'a marqué C, ce qui introduit un autre problème avec le résultat de 'malloc'. – Mat