J'ai un programme échoué avec:
terminate called after throwing an instance of 'std::bad_alloc' what(): St9bad_alloc
3 Réponses :
Il est tout à fait possible que cela se produit en raison de la mémoire écrasée, corrompue ainsi l'état du système d'allocation de la mémoire (qui est généralement conservé avant ou après que les blocs de mémoire renvoyés à l'application). P>
Si vous avez la possibilité (c'est-à-dire que vous êtes sur X86 Linux), exécutez votre programme dans Valgrind , Cela peut souvent vous montrer exactement où la corruption arrive. P>
Ce n'est pas vraiment malloc / gratuit qui provoque l'exception, c'est "nouveau" qui est définitivement dans une partie de votre application C ++. On dirait que vous fournissez un paramètre trop gros pour "nouveau" pour allouer.
'std :: bad_alloc' est causé par le code suivant par exemple: p> qui vous permet de casser une application lorsque toute exception est lancée.
Cependant, pour vous aider à voir qu'il devrait être possible d'exécuter p> dans les versions plus récentes. P> et n'oubliez pas que: P> (gdb) aide à attraper p>
blockQuote> est une bonne source pour d'autres informations utiles. p> p>
Votre lien pour "Quand une exception est lancée ou attrapée" est 404.
J'ai eu ceci lorsque vous essayez de lire dans un fichier qui n'existe pas ... J'essaierais de créer un tampon interne pour le contenu du fichier, mais que le fichier n'existait pas, ma création du tampon vissé.
int lenth_bytes; length_bytes = in_file.tellg(); new char [length_bytes]; // length_bytes hadn't been initialised!!!!