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

  1. #1
    Membre régulier
    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é
    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.
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

  3. #3
    Expert éminent
    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é
    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 .
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

  5. #5
    Membre régulier
    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

    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
    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.

###raw>template_hook.ano_emploi###