Cette question a été inspirée par une question similaire : Comment delete[] "connaît" la taille du tableau d'opérandes ?
Ma question est un peu différente : Existe-t-il un moyen de déterminer la taille d'un tableau C++ de manière programmatique ? Et si non, pourquoi ? Chaque fonction que j'ai vue qui prend un tableau nécessite également un paramètre entier pour lui donner la taille. Mais comme la question liée l'a souligné, delete[]
doit connaître la taille de la mémoire à désallouer.
Considérons ce code C++ :
int* arr = new int[256];
printf("Size of arr: %d\n", sizeof(arr));
Cela imprime " Size of arr: 4
", qui est juste la taille du pointeur. Ce serait bien d'avoir une fonction qui imprime 256, mais je ne pense pas qu'il en existe une en C++. (Encore une fois, une partie de la question est de savoir pourquoi elle n'existe pas).
Clarification : Je sais que si je déclarais le tableau sur la pile au lieu du tas (c'est-à-dire " int arr[256];
") que le sizeof
retournerait 1024 (longueur du tableau * sizeof(int)).
0 votes
En fait, si vous avez alloué le tableau sur la pile, l'opérateur sizeof renverrait 1024 -- ce qui est 256 (le nombre d'éléments) * 4 (la taille d'un élément individuel). (sizeof(arr)/sizeof(arr[0])) donnerait le résultat 256.
0 votes
Merci, j'ai négligé cela parce que j'utilisais en fait char[] dans mon code de test (et sizeof(char) == 1)
0 votes
Bien que ce ne soit qu'une hypothèse - puisque cela ne fonctionne pas - je dois signaler que vous auriez dû écrire
printf("Size of arr: %d\n", sizeof(*arr));
au lieu deprintf("Size of arr: %d\n", sizeof(*arr));
puisque vous souhaitez récupérer la taille du pointeur déréférencé.