Bonjour,
j'aimerais savoir ce qui se passe lorsqu'on a un pointeur (disons int*ptr) et que l'on fait
ptr = new int[0];?
Je m'attendais a priori à ce que ptr soit égal à NULL mais après vérification ce n'est pas le cas.
Merci!
Bonjour,
j'aimerais savoir ce qui se passe lorsqu'on a un pointeur (disons int*ptr) et que l'on fait
ptr = new int[0];?
Je m'attendais a priori à ce que ptr soit égal à NULL mais après vérification ce n'est pas le cas.
Merci!
Ca t'alloue un tableau avec 0 élément. Et si c'est négative le comportement n'est pas définie.
Un tableau de 0 éléments???
Et vers quelle adresse pointe ptr alors?
Ressources proposées par 3DArchi - Les fonctions virtuelles en C++ - Cours et tutoriels C++ - FAQ C++ - Forum C++.
Je me pose la même question.et le delete ne pose pas problème ?
J'ai testé delete[] ptr après ptr=new int[0] et je n'ai d'erreur ni à la compilation ni à l'exécution. Après, est-ce que le boulot a bien été fait...
Salut,
Comme l'a dit 3DArchi, L'adresse est valide, dans le sens où elle t'a été réservée par l'OS, et ce, même si elle est de taille nulle
Le delete [] correspondant aura donc le résultat escompté
Par contre, le déréférencement ou l'arithmétique de pointeurs basée sur cette adresse enverra ton programme dans les choux![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Il est trop fort 3DArchi! ^^Comme l'a dit 3DArchi, L'adresse est valide, dans le sens où elle t'a été réservée par l'OS, et ce, même si elle est de taille nulle
Le delete [] correspondant aura donc le résultat escompté
La bonne nouvelle c'est que je n'ai plus à gérer le cas dans mes constructeurs de tableaux.![]()
Partager