pepsidrinker
Messages postés151Date d'inscriptionmardi 12 octobre 2004StatutMembreDernière intervention15 avril 2009
-
15 févr. 2007 à 01:10
pepsidrinker
Messages postés151Date d'inscriptionmardi 12 octobre 2004StatutMembreDernière intervention15 avril 2009
-
17 févr. 2007 à 16:00
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
Messages postés151Date d'inscriptionmardi 12 octobre 2004StatutMembreDernière intervention15 avril 2009 15 févr. 2007 à 01:29
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.
cs_vicenzo
Messages postés178Date d'inscriptionmardi 16 août 2005StatutMembreDernière intervention25 août 20101 16 févr. 2007 à 22:57
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++ !