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 :
char msg[] = "<HTML>En construction</HTML>";
std::cout << "Taille : " << SizeofArray<char>(msg) << std::endl;
Pas de probleme cela me retourne bien 28.
Cependant lors d'un test similaire avec un tableau d'entier quelques problemes sont apparut
int test[6];
test[0]=123;
test[1]=456;
test[2]=789;
test[3]=741;
test[4]=852;
test[5]=963;
std::cout << "Taille : " << SizeofArray<int>(test) << std::endl;
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.
Voici un exemple de ce que j'obtiens :
Resultat pratique (nombre de decalage: addresse pointée) :
0: 0xbfa367c0
1: 0xbfa367d0
2: 0xbfa367e0
3: 0xbfa367f0
4: 0xbfa36800
resultat théorique (nombre de decalage: addresse pointée):
0: 0xbfa367c0
1: 0xbfa367c4
2: 0xbfa367c8
3: 0xbfa367cc
4: 0xbfa367d0
S'il vous plait !

Si l'informatique été de l'alcool il y aurait des genies partout