Je opérateur overloadded nouveau [] comme celui-ciC++ surchargé nouvelle requête []: Quelle taille prend-elle en paramètre?
void * human::operator new[] (unsigned long int count){
cout << " calling new for array with size = " << count << endl ;
void * temp = malloc(count) ;
return temp ;
}
et appeler maintenant
human * h = new human[14] ;
disent sizeof(human) = 16
, mais compter qu'il imprime est de 232 qui est 14 * 16 + sizeof (int *) = 224 +8.
Pourquoi cet espace supplémentaire est-il alloué? Et où tombe-t-il en mémoire? Parce que lorsque j'imprime *h
OU h[0]
j'obtiens les mêmes résultats, donc ce n'est pas au début du morceau de mémoire. Est-ce correct du tout OU il me manque quelque chose ici?
Bonne question. Pourtant, le nitpicker à l'intérieur de moi a besoin de souligner que vous ne vérifiez pas pour malloc() retournant un pointeur nul. – sharptooth
@sharptooth: ur droite mais c'était intentionnel coz je voulais me concentrer sur une vraie question et ne pas ajouter trop d'ifs :) Idéalement, il faut vérifier la température! = 0 sinon jeter une exception (bad_alloc kinda) –
Les octets supplémentaires sont pour stocker le nombre d'octets alloués. Mais où il stocke dépend de l'implémentation. – bjskishore123