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

 C Discussion :

Taille d'un tableau depuis un pointeur.


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    .
    Inscrit en
    Octobre 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Octobre 2018
    Messages : 62
    Points : 79
    Points
    79
    Par défaut Taille d'un tableau depuis un pointeur.
    Bonjour !

    Je suis face à un petit problème de pointeur pour une fonction. J'ai un pointeur d'un certains type, qui correspondant à un tableau. Mais j'ai besoin de parcourir ce tableau par l'intermédiaire de ce pointeur, mais je ne connais pas la taille de ce dernier.
    Je me suis alors dit que si je fais avec l'arithmétique des pointeurs, j'incrémente une variable jusqu'à tomber sur null avec le pointeur. Mais je doute que cela soit une condition adéquat, vu que si je dépasse la taille de mon tableau, je peux pointer sur n'importe quoi non ? Et donc possiblement un segfault.

    Il y a t-il donc moyen de connaître la taille d'un tableau depuis un pointeur ?

    Merci d'avance !

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    La réponse est dans ta question. Non, malheureusement il n'y a pas de mécanisme interne qui te permette de connaitre sa taille.

    Tu n'as que deux possibilités qui s'offrent à toi :

    1. Transmettre la taille du tableau en tant que paramètre aux différentes fonctions qui doivent le parcourir,
    2. Ajouter un élément en fin de tableau qui aura une valeur particulière. Elle indiquera la fin.

    Le meilleur exemple qu'il soit sont les chaines de caractères. Elles se terminent par '\0' pour indiquer la fin du tableau.

    Tu peux aussi créer une structure qui contiendra un int (ou autre) ainsi que le pointeur de ton tableau.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 627
    Points : 10 551
    Points
    10 551
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Tu n'as que deux possibilités qui s'offrent à toi :
    Tu en as 3

    Tu peux faire une structure, avec au moins 1 tableau et 1 taille.
    Et l'avantage de la structure, tu peux la faire évoluer en tableau dynamique ou alors faire une autre gestion.


    Édit : j'ai répondu trop vite en loupant la dernière phrase du message de @gerald3d

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par foetus Voir le message
    Tu en as 3

    Tu peux faire une structure, avec au moins 1 tableau et 1 taille.
    Et l'avantage de la structure, tu peux la faire évoluer en tableau dynamique ou alors faire une autre gestion.
    Tu as raison. Mais c'était le sens de ma dernière phrase .

  5. #5
    Membre régulier
    Homme Profil pro
    .
    Inscrit en
    Octobre 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Octobre 2018
    Messages : 62
    Points : 79
    Points
    79
    Par défaut
    C'est bien ce que je pensais. Je pensais donc faire exactement comme pour les chaines de caractères comme tu l'as dit plus haut !

    Merci de vos réponses !

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Le plus simple selon moi c'est d'avoir ta propre fonction allocTab qui alloue le tableau précédé de sa taille, ou une structure type {taille, pointeur}. Le tout avec une API qui permette de manipuler un tel objet.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Citation Envoyé par LePtitBen Voir le message
    C'est bien ce que je pensais. Je pensais donc faire exactement comme pour les chaines de caractères comme tu l'as dit plus haut !
    Mais évidemment, cela ne marche que quand il existe une valeur que tu considères "inacceptable" pour ton tableau.
    Si ton tableau était supposé accepter n'importe quel int de INT_MIN à INT_MAX, tu ne pourrais pas faire ça.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Tableau 2 dimentions, pointeur
    Par DidierMesenbourg dans le forum C
    Réponses: 4
    Dernier message: 22/02/2005, 09h08
  2. Changer la taille d'un tableau déjà initialisé
    Par totofweb dans le forum C++
    Réponses: 2
    Dernier message: 25/07/2004, 16h55
  3. taille d'un tableau
    Par monstour dans le forum ASP
    Réponses: 3
    Dernier message: 24/06/2004, 16h16
  4. Taille maximum de tableau en Delphi
    Par yannick37 dans le forum Langage
    Réponses: 5
    Dernier message: 03/03/2004, 14h18
  5. qbasic : taille d'un tableau
    Par clood200 dans le forum Basic
    Réponses: 2
    Dernier message: 16/09/2003, 08h26

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