IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Allocation de tableaux de longueur nulle


Sujet :

Langage C++

  1. #1
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut Allocation de tableaux de longueur nulle
    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!

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Ca t'alloue un tableau avec 0 élément. Et si c'est négative le comportement n'est pas définie.

  3. #3
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Un tableau de 0 éléments???
    Et vers quelle adresse pointe ptr alors?

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Aleph69 Voir le message
    Un tableau de 0 éléments???
    Et vers quelle adresse pointe ptr alors?
    Vers une adresse que t'a réservé l'O.S. Cette adresse est valide comme celle obtenue par une autre allocation valide. Seulement, tu ne peux déréférencer l'adresse puisque la valeur ne t'appartient pas

  5. #5
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Vers une adresse que t'a réservé l'O.S. Cette adresse est valide comme celle obtenue par une autre allocation valide. Seulement, tu ne peux déréférencer l'adresse puisque la valeur ne t'appartient pas
    et le delete ne pose pas problème ?

  6. #6
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    et le delete ne pose pas problème ?
    Je me pose la même question.
    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...

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    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

  8. #8
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    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é
    Il est trop fort 3DArchi! ^^
    La bonne nouvelle c'est que je n'ai plus à gérer le cas dans mes constructeurs de tableaux.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. allocation de tableaux !
    Par Nulysses dans le forum Fortran
    Réponses: 2
    Dernier message: 16/11/2009, 10h58
  2. Réponses: 2
    Dernier message: 22/05/2007, 18h23
  3. [Tableaux] Insérer des NULL dans une table
    Par jerem_orga dans le forum Langage
    Réponses: 5
    Dernier message: 03/01/2007, 17h22
  4. [VB6 et ORACLE] identificateur de longueur nulle interdit
    Par tim69000 dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 10/04/2006, 11h33
  5. [Oracle] identificateur de longueur nulle interdit - help me
    Par gregb dans le forum Bases de données
    Réponses: 1
    Dernier message: 03/07/2005, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo