2017-09-23 1 views
0

Quelle est la différence entre ces trois lignes en C++?Quelle est la différence entre l'allocation de pointeur dynamique pour une seule variable et un tableau?

int *p= new int; 
int *p= new int[10]; 
int *p = new int[]; 

Nous sommes déjà la mémoire dynamiquement déclarant à pointeur variable p, pourquoi est-il nécessaire de mentionner spécifiquement la taille du tableau de pointeurs?

+0

et le dernier est une erreur: expression primaire attendue avant ']' jeton int * p = new int []; –

Répondre

2
int *p = new int; 

Cette alloue assez de mémoire pour un seul objet de type int et stocke un pointeur vers elle dans le pointeur-to-int variables p. Cela signifie que *p fait référence à un objet int valide.

int *p = new int[10]; 

Cette mémoire contiguë réserve suffisamment de dix objets de type int et stocke un pointeur vers la première int dans le pointeur-to-int variables p. Cela signifie que p[0] à p[9] se réfèrent aux objets int valides.

int *p = new int[]; 

Cette instruction est syntaxiquement incorrecte. Ce n'est pas un C++ valide, et n'a donc aucune signification.

... why is it required to specifically mention pointer array size?

Sinon, comment est l'allocateur de mémoire censé savoir la quantité de mémoire à allouer si vous ne dites pas combien de int s dont vous avez besoin de place pour?

+2

En outre, il convient de noter que 'new' pour un seul objet doit correspondre à' delete' pour un seul objet, et 'new []' pour un tableau doit correspondre à 'delete []' pour un tableau. 'new []' stocke le nombre de tableaux de manière à ce que 'delete []' sache combien d'objets doivent être détruits (si nécessaire) avant de libérer le bloc de mémoire sous-jacent. –