Dans le premier exemple -
int* Bar;
Pointeurs pointe sur un objet. Le travail du compilateur consiste à affecter de la mémoire (c'est-à-dire 4 octets) pour le pointeur d'entier Bar
afin de contenir l'adresse d'une variable entière. Cependant, à l'endroit où il pointe doit être spécifié afin de déréférencer.
C'est plutôt comme si une banque vous donnait un compte. Juste avoir un compte bancaire ne signifie pas que vous pouvez tirer de l'argent à partir d'un guichet automatique. Votre compte devrait avoir de l'argent pour pouvoir dessiner. La transaction échoue si vous n'avez pas d'argent et dans le paradigme de la programmation, le comportement n'est pas défini. Donc, votre premier exemple de comportement est indéfini. Si mon analogie est trop gênante, je suis désolé.
Dans le second exemple -
int* Bar = new int[1] ; // Here [1] is unnecessary as your Bar points to a single integer memory location.
Ici, Bar
est un pointeur vers l'emplacement d'un entier valide obtenu à partir du magasin libre. Ainsi, l'emplacement du pointeur Bar
peut avoir des valeurs de vidage. Alors, intialize, avant de déréférencer. c'est à dire.,
*Bar = 10;
*Bar *= 10;
En second exemple, puisque vous gérez des ressources, de sorte que son votre responsabilité de retourner les sources au magasin libre.
Essayez-vous d'attribuer manuellement l'adresse mémoire? En tout cas, je ne suis pas un expert, mais je suis à peu près certain que vous ne dites jamais "new int", ou tout autre primitif. – jakev
Fitst on a tort. vous devez le renouveler. –