begin process at 2012 05 28 20:08:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Autre

 > 

delete ne marche pas ...aidez-moi :(


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

delete ne marche pas ...aidez-moi :(

jeudi 15 février 2007 à 01:10:40 | delete ne marche pas ...aidez-moi :(

pepsidrinker

Bonjour a tous,
Voici mon code :
----
 for(int i= 1; i!= ArraySize+1 ;++i)
   delete []   ArrayPointer[i];
-----
ArrayPointer est de type char**. (un tableau a 2 dimension).
et donc, ArrayPointer[i] est un char*.
Tout est bien initialisé, le system a donné de la mémoire avec NEW, je peut meme lire les caractère que j'entre,
mais quand delete arrive...erreur.
Pourtant, avec la meme syntaxe, je peut lire les donné !!! (remplace delete par cout).
aidez-moi :(!!!

Pepsidrinker
jeudi 15 février 2007 à 01:21:05 | Re : delete ne marche pas ...aidez-moi :(

SAKingdom

Membre Club
C'est normal ça?

for(int i= 1
Tu commence à 1 donc ArreyPointer[0] n'est pas supprimé.

i!= ArraySize+1
Si il y a ArraySize pointeurs, tu essais de libérer la mémoire de 2 pointeurs inexistant car en dehors des bornes.

Essais:
for(int i = 0; i != ArraySize-1 ;++i)
   delete []   ArrayPointer[i];

C++ (@++)

jeudi 15 février 2007 à 01:29:17 | Re : delete ne marche pas ...aidez-moi :(

pepsidrinker

oui je lavait deja essayer mais...meme probleme.
Voila exactement l'erreur ke j'ai:

         /* verify block type */
        _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
        Cette instruction est dans un autre fichier, qui contien l'opérateur delete.
       En fait, si le block métais pas valide, je ne serai aps capable de le lire avec cout....mais la je suis bel et bien capable.
     

Pepsidrinker
jeudi 15 février 2007 à 01:55:45 | Re : delete ne marche pas ...aidez-moi :(

SAKingdom

Membre Club
J'obtien le même type d'erreur quand j'essais de libérer 2 fois la mémoire pointé par un même pointeur:

char *test = new char[5];
delete[] test; delete[] test; // CRASH

 Si 2 ArrayPointer pointe au même endroit, c'est le crash assuré.

C++ (@++)

jeudi 15 février 2007 à 02:02:36 | Re : delete ne marche pas ...aidez-moi :(

pepsidrinker

non ,le seul delete ds mon programme est dans cette instruction, et en plus, si je peut le lire avec cout, c'est qu'il n'est pas deleté...

Lerreur arrive au premier appelle de delete.

Pepsidrinker

jeudi 15 février 2007 à 11:47:03 | Re : delete ne marche pas ...aidez-moi :(

turnerom

Salut, tu peux mettre ton code à l'endroit ou tu fais les new stp



TuRn3r
jeudi 15 février 2007 à 17:36:19 | Re : delete ne marche pas ...aidez-moi :(

yann_lo_san

Salut,
Moins d'erreurs avec chaine fixe :

#defineFIXED_STRING32

char (*pszArray)[FIXED_STRING];

pszArray = new char[10][FIXED_STRING];

delete[] pszArray; // UN SEUL DELETE !

jeudi 15 février 2007 à 20:21:18 | Re : delete ne marche pas ...aidez-moi :(

vicenzo

Membre Club
Salut !

for(int i= 1; i!= ArraySize+1 ;++i)
   delete []   ArrayPointer[i];

=> Apparemment tu aimes plus VB que C/C++...

Commencer ta boucle par 1 au lieu de 0 : c'est bien du VB !!!!

Pour  comprendre ou est ton problème, il faut aussi que tu postes le code que fait les allocations....

Postes donc le code d'allocation, et on te dépatouillera tout ca ....




vendredi 16 février 2007 à 17:50:27 | Re : delete ne marche pas ...aidez-moi :(

pepsidrinker

Aucun probleme.

Voici donc la fonction qui déclare et alloue de la mémoire (NEW)

----------------------------

ERROR CDatabase::CreateArray()
{
 ArrayPointer = new char*[ArraySize+1];
 if(ArrayPointer == NULL)
  return NOT_ENOUGH_MEMORY;
 for(int i= 1; i!= ArraySize+1; ++i)
 {
  ArrayPointer[i] = NULL;
  ArrayPointer[i] = new char[MAX_STRING_LENGHT];  //= 20 caractère
  ArrayPointer[i] = "NULL_CHARACTER"; //La valeur par defaut de la chaine...
 }
  ArrayCreated = true;
  return NO_ERROR

}

Pepsidrinker

vendredi 16 février 2007 à 22:57:06 | Re : delete ne marche pas ...aidez-moi :(

vicenzo

Membre Club
Pepsidrinker,

Hum.... c'est bien ce que je disais... le C/C++, c'est pas comme VB !

ton code présente 3 soucis majeurs :

* le loop sur le tableau à partit de 1 : ArrayPointer[0] n'est pa initialisé et donc contient une valeur indeterminée et un acces à ArrayPointer[0] est un crash assuré.

 *   Pourquoi l'expression "for(int i= 1; i!= ArraySize+1; ++i) ". Depuis des décennies, cette expression est généralement écrite :
    for(int i=
0 ; i < ArraySize ; i ++ )...
    ...ton code est moins lisible, des opérations sont inutiles (
i < ArraySize génère moins de code machine que i!= ArraySize+1 )

* Mais la cerise sur le gateau et par ailleur l'origine du bug, c'est :

    ArrayPointer[i] = new char[MAX_STRING_LENGHT]; 
  
  -> tu alloue de la mémoire et du fait pointer ArrayPointer[i] dessus
    ArrayPointer[i] = "NULL_CHARACTER"
    ->t
u fais maintenant pointer ArrayPointer[i] vers une constante dont la mémoire est automatiquement allouée par le compilo;
   delete []   ArrayPointer[i];
    -> tu cherche donc à désalouer "NULL_CHARACTER" , constante allouée par le compilo... C'est comme essayer de piquer la copine de Dark Vador...

remplace ArrayPointer[i] = "NULL_CHARACTER" par  :
        *
ArrayPointer[0] = 0 ou
        * strcpy(ArrayPointer[i] , "NULL_CHARACTER") ou
        * strnpcy(ArrayPointer[i], "NULL_CHARACTER",MAX_STRING_LENGHT)


Un conseil, revois les bases des pointeurs en C/C++ !


Bonne soirée.... J'espère que cela a pu t'aider !

Bon courage...




1 2

Cette discussion est classée dans : marche, char, donné, delete, arraypointer


Répondre à ce message

Sujets en rapport avec ce message

problème tout bête [ par Raoul12 ] voilà, je débute dans le c++ et je voudrais faire ça:char hohun[32] ;hohun = "hohun" ;mais ça ne marche pas... pourtant si je fais ça:char hohun[32] = problème [ par Raoul12 ] voilà, je débute dans le c++ et je voudrais faire ça:char hohun[32] ;hohun = "hohun" ;mais ça ne marche pas... pourtant si je fais ça:char hohun[32] = pour le generateur nfo ca marche mais pas la. [ par Xs ] bonjours !je suis en train de me faire un logicielpour gerer ma collection de CDs mais voila : lepricipal probleme est que dans les titres, y'a bien a Problème de delete [ par ManTico ] Salut à tous, j'ai un peu de peine avec la gestion de la mémoire et je voulais savoir deux choses :- pourquoi en mode Debug mon prog plante sur les de 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 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 marche en debug mais pas en release [ par SnOOpss ] Bonjour j utilise un code qui marche tres bien (debug et release) en faisanthfond=(HBITMAP)LoadImage(0,TruePath("\\data\\fond.bmp"),IMAGE_BITMAP,0,0,L Variable char [ par bthivent ] Bonjour ! j'ai du mal à faire un simple variable contenant un texte, puis l'afficherj'ai vu qu'on arrivait a un truc en faisant :char variable;variabl Allocation dynamique de char* .... [ par Gendal67 ] Bonjour à tous....Avant d'acheter un flingue pour de bon, je me suis dit qu'il pourrait etre judicieux de demander de l'aide quelque part... voila, je Comment free un char *** ? [ par kaervas ] Bonjour, j'ai un probleme pour free un char ***,pour le char ** j'utilisais cette fonction (qui a priori marche):void      dfree(char **str){ int    i


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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 : 1,373 sec (4)

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