2010-10-24 5 views
1

Pourquoi cela me donne-t-il une erreur de mémoire?Est-ce que itoa efface char?

char* aVar= new char; 
itoa(2, aVar, 10); 
delete aVar; 

Est-ce itoa supprimer le aVar? Comment savoir si une fonction C++ supprime le pointeur, existe-t-il une convention à ce sujet?

Si je fais cela, alors l'erreur ne se produit pas:

char* aVar= new char; 
delete aVar; 
+0

'new' n'est pas un opérateur dans c. J'ai donc redéposé la question pour être C++. –

+0

vous avez raison, je vais le changer en C++ – okami

Répondre

4

itoa besoins tableau assez longtemps pour tenir toute la valeur, plus le caractère nul à la fin. Dans votre cas, vous devez allouer au moins 2 caractères, sinon le caractère nul à la fin tombe sur la mémoire non allouée. Voir la documentation on itoa.

Pour le pur C, sprintf devrait être une solution plus portable:

char aVar[2]; 
sprintf(aVar, "%d", 2); 

(comme itoa, selon la documentation, n'est pas universellement disponible).

Si vous utilisez C++, le meilleur moyen d'y parvenir est d'utiliser une chaîne de caractères. Voir cette question: Alternative to itoa() for converting integer to string C++? pour la discussion.

+1

'char * aVar = new char [2]; itoa (2, aVar, 10); delete [] aVar; ' –

+0

Mais c'est du code moche. Vous devriez éviter la gestion manuelle de la mémoire et les fonctions qui fonctionnent sur des chaînes de taille fixe. –

+4

Ou juste 'char aVar [2]; itoa (2, aVar, 10); ' – Vlad