cs_Kaory
Messages postés4Date d'inscriptionlundi 20 mars 2006StatutMembreDernière intervention21 août 2006
-
23 juin 2006 à 14:55
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 2006
-
24 juin 2006 à 14:07
Bonjour
j'ai un petit (ou gros faut voir) probleme je manipule des char * et j'utilise des new et lorsqu'il vient le moment de les desallouer avec delete[] mon programme plante et me le signale grace à une jolie fenetre ou il me dit "DAMAGE:after normal block (#56) at 0x00421D30"
Je vous montre un exemple de code qui ne marche absolument pas chez moi
int main(void)
{
char *ptr;
char *test = "blablabla";
ptr = new char[strlen(test)];
strcpy(ptr,test);
cout << ptr << endl; //l'affichage se fait correctement
delete [] ptr; //plantage en mode debug
return 0;
}
Je ne pense pas avoir fait d'erreur mais si c'est le cas n'hesitez pas à me le dire.
Je developpe sous VC++ et je travaille en mode debug.
merci d'avance
A voir également:
Probleme de delete suite à une allocation dynamique
cs_darunia
Messages postés354Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention24 mars 20112 23 juin 2006 à 15:44
Vecchio a raison.
De plus, les lignes de ce genre sont à proscrires :
char *test = "blablabla";
Tu copies "blablabla" dans une zone mémoire non allouée ! Si la zone n'est pas utilisée ça fonctionnera, mais dans le cas contraire ... Violation d'acces !!!
Hylvenir
Messages postés364Date d'inscriptionmercredi 11 février 2004StatutMembreDernière intervention 5 octobre 20062 24 juin 2006 à 14:07
Normalement, un compilo C++ sympa devrait donner au moins un warning
sur char* msg "blabla"; // const char* msg "kjkj"; serait le bonne forme comme le dit vecchio
En C++, les chaines sont constante (const char*) et peuvent être en mémoire read_only
(certains OS peuvent faire planter ton progamme sur un msg[1] = 'x' par exemple )
sinon pour du C++
int main( void ) ça fait penser à du C
et
return 0 // n'est pas obligatoire masi peut donner un warning sur un compilo pas très sympa.