Comment obtenir la taille d’un tableau 2D alloué dynamicment

J’ai dynamicment alloué le tableau 2D. Voici le code

int **arrofptr ; arrofptr = (int **)malloc(sizeof(int *) * 2); arrofptr[0] = (int *)malloc(sizeof(int)*6144); arrofptr[1] = (int *)malloc(sizeof(int)*4800); 

Maintenant, je dois savoir que combien d’octets sont alloués dans arrofptr, arrofptr [0], arrofptr [1]? y a-t-il un moyen de connaître la taille?

si nous allons imprimer

 sizeof(arrofptr); sizeof(arrofptr[0]); sizeof(arrofptr[1]); 

alors il imprimera 4.

Vous ne trouvez pas la taille de arrofptr , car il ne s’agit que d’un pointeur à un autre. Vous définissez un tableau de tableaux utilisant cela. Il n’existe aucun moyen de communiquer les informations de taille avec un seul pointeur, vous devez gérer vous-même les informations de taille .

La seule valeur malloc() par malloc() est un pointeur sur le premier octet de la région atsortingbuée (ou NULL en cas d’échec). Il n’y a pas de moyen portable, standard, d’obtenir la taille d’allocation associée à partir d’un tel pointeur, donc en général, la réponse est non .

La méthode C consiste à représenter les tableaux et les tampons en général avec une paire de valeurs: une adresse de base et une taille. Ce dernier est typiquement du type size_t , identique à l’argument de malloc() , d’ailleurs.

si vous voulez garder la trace de la taille d’un bloc de code alloué, vous aurez besoin de stocker cette information dans le bloc de mémoire que vous allouez, par exemple

 // allocate 1000 ints plus one int to store size int* p = malloc(1000*sizeof(int) + sizeof(int)); *p = (int)(1000*sizeof(int)); p += sizeof(int); ... void foo(int *p) { if (p) { --p; printf( "p size is %d bytes", *p ); } } 

alt. mettre dans une structure

 struct { int size; int *array; } s; 

Vous ne pouvez pas obtenir la longueur des tableaux alloués dynamicment en C (2D ou autre). Si vous avez besoin de ces informations, enregistrez-les dans une variable (ou au moins un moyen de les calculer) lorsque la mémoire est allouée initialement et transmettez le pointeur à la mémoire et à la taille de la mémoire.

Dans votre scénario de test supérieur à sizeof, la taille du pointeur est renvoyée. Par conséquent, la taille des pointeurs calculée est généralement de 4; c’est pourquoi vous en avez 4 et vous aurez toujours le résultat sortingvial de 4.