begin process at 2012 02 13 03:02:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Probleme de delete suite à une allocation dynamique


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme de delete suite à une allocation dynamique

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ée 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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 11,123 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales