Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Probleme de delete suite à une allocation dynamique [ Divers / Général ] (Kaory)

vendredi 23 juin 2006 à 14:55:18 | Probleme de delete suite à une allocation dynamique

Kaory

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



vendredi 23 juin 2006 à 15:14:34 | Re : Probleme de delete suite à une allocation dynamique

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
ptr doit contenir un caractère de plus (le 0 terminal)
Il faut donc:
ptr = new char[strlen(test) + 1];

_____________________________________
Un éditeur de ressources gratuit pour Windows


vendredi 23 juin 2006 à 15:44:17 | Re : Probleme de delete suite à une allocation dynamique

darunia

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 !!!

D@runia

vendredi 23 juin 2006 à 16:39:43 | Re : Probleme de delete suite à une allocation dynamique

luhtor

Oue mais en fait si c'est correct. Ca alloue la place nécessaire pour contenir la chaine "blablabla".



vendredi 23 juin 2006 à 16:47:17 | Re : Probleme de delete suite à une allocation dynamique

vecchio56

Administrateur CodeS-SourceS
A mon avis il est plus logique de le déclarer en const char*, car tu n'est pas sensé modifier la chaine

_____________________________________
Un éditeur de ressources gratuit pour Windows


samedi 24 juin 2006 à 14:07:59 | Re : Probleme de delete suite à une allocation dynamique

Hylvenir

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.




Cette discussion est classé dans : probleme, test, ptr, char, delete


Répondre à ce message

Sujets en rapport avec ce message

Une Class et des Char ... [ par Tidam ] Vala j'ai un petit probleme avec ma source :class Test{public: Test (char initialName[15]); char LireName() const { return wName; } void DefName (char Probleme de char [ par ph0ton ] J'ai un probleme avec une condition.Je m'explique :J'ai une variable : char Fonction[30];Je rempli la variable grace a la lecture d'un fichier.Ensuite pointeur sur une structure [ par xc78370 ] Bonjour, Voila mon probleme. si quelqu'un a une idée, mrci d'avance.j'ai plusieurs structures, du style :---------------------------------------struct Probleme de Variable [ par akaras ] Bonjour à tous,Voilà mon code :unsigned char Valeur[6];Valeur=Inp32(0x379);SetDlgItemText(hwnd , IDC_AFFICHAGE_RESULT, Valeur); Je veux afficher la le PROBLEME POINTEURS [ par zeloveur ] char * saisirChaine(){ int i=0; char *chn; chn=(char *)malloc(sizeof(char)); do { chn[i]=getchar(); chn=(char *)realloc(chn,(++i+1)*sizeof(char)); } Probleme avec operateur delete! [ par WhiteSpi ] Bonjour a tous,J'ai une fonction qui construit un arbre de positions...donc en gros je declare un :Tree *tree= new struct Tree()ensuite je le remplis, Libération mémoire.... [ par Clonk ] Bonjour,Voilà, j'ai une appli qui utilise énormément de mémoire, jai plusieurs listes chainées de plusieurs milliers d'enregistrements, de nombreuses test sur variable de type char [ par enrageur ] j'aimerais indetifier des mots dans un fichier txt. J'ouvre le fichier et je le copy dans un char (data). Ensuite je fais un test pour voir si les deu que fait exactement delete ?? [ par Tonus ] Salut @ tous Voila je voudrais savoir si en créant un tablo dans un fonction , l'instruction delete va -t- elle supprimer la totalité du tablo ou jus probleme lors de la saisie de données pour mon répertoir [ par doggy59115 ] Bonjour a tous, j'ai un petit probleme avec mon programme en C. Lors de l'affichage des données saisies, le nom et le numero de telephone ne forment q


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,515 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.