CCJ
Messages postés565Date d'inscriptionmercredi 19 mai 2004StatutMembreDernière intervention30 avril 2008
-
30 avril 2008 à 13:16
CCJ
Messages postés565Date d'inscriptionmercredi 19 mai 2004StatutMembreDernière intervention30 avril 2008
-
30 avril 2008 à 14:33
Bonjour.
Je cherche actuellement a determiner la taille d'un tableau. J'ai donc ecrit le petit bout de code suivant :
template <class T> long SizeofArray(T * data)
{
long reg;
reg = 0;
while(*data != 0)
{
data += sizeof(T);
reg++;
}
return reg;
}
J'ai testé avec des chaines de type char de la maniere suivante :
La le resultat est aleatoire.
J'ai constaté que , avec des char, l'addtion de l'adresse du premier element avec la taille fonctionne correctement mais avec des int , au lieu d'ajouter la taille qui est de 4 oct, cette fonction ajoute 16 , ce qui decale forcement tout et finit par faire pointer data en dehors de la variable.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 30 avril 2008 à 13:52
Bien sûr que ça fonctionne avec une chaine de caractère. Une chaine de caractère se termine par un 0 de fin de chaine.
Cependant, un tableau de int (ou BYTE ou DWORD etc.) NE PEUT se terminer par une quelconque valeur puisque, justement, il peut toutes les prendre. Un 0 peut très bien se situer en plein milleu du tableau.
Il est impossible de déterminer la longueur d'un tableau (sauf une chaine de caractère) à partir d'un pointeur
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 30 avril 2008 à 14:04
Non. On peut faire un sizeof cependant, il retournera la taille total du tableau (sur un tableau seulement, pas sur un pointeur) et non la taille du nombre d'éléments "présents" (car justement, il est impossible de déterminer si une case a une valeur ou non).
CCJ
Messages postés565Date d'inscriptionmercredi 19 mai 2004StatutMembreDernière intervention30 avril 20081 30 avril 2008 à 14:33
Ah mais quel boulet suis-je ><.
Le probleme de debordement en question (16 au lieu de 4) vennai de fait que l'incrementation de pointeur prend en compte le type de pointeur ...
Voila deux problemes , deux solutions :O
Si l'informatique été de l'alcool il y aurait des genies partout