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 :

Obtenir la taille d'un tableau dynamique


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Autodidacte
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Autodidacte

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par défaut Obtenir la taille d'un tableau dynamique
    Bonjour

    J'aimerais créer une fonction pour obtenir la taille d'un tableau dynamique.

    Je sais que l'opérateur sizeof sur un pointeur renvoie la taille de celui-ci et non la taille total des éléments pointés.
    J'ai lu qu'il existe des fonctions pour cette tâche (_msize sous windows par exemple).

    Logiquement, la taille d'un tableau alloué avec new[] est gardée en mémoire quelque part puisque l'opérateur delete[] sait combien d'éléments libérer.

    J'aimerais une explication ou un exemple de l'implémentation d'une tel fonction, car la majorité de mes classes n'utilisent aucune bibliothéque autre que celles que j'ai créés et j'aimerais continuer comme ça (c'est bon pour mon aprentissage).

    Merci d'utiliser de votre temps pour me répondre.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    En dépis du fait que ça peut sembler complètement stupide, c'est impossible. Bon, en fait il y a une explication plausible: je crois que dans le cas des types primitifs, et avec certains systèmes de gestion du tas, stocker ce nombre n'est pas nécessaire et, en plus, une plus grande quantitié de mémoire sera réellement réservée. Au final, il n'y a aucun moyen prévu dans le standard pour retrouver cette taille.

    En dehors de ça, je ne peux que m'outrer en lisant pareille bétise:
    Citation Envoyé par Cbenlfun Voir le message
    la majorité de mes classes n'utilisent aucune bibliothéque autre que celles que j'ai créés et j'aimerais continuer comme ça (c'est bon pour mon aprentissage).
    Quel que soit le langage de programmation c'est une très mauvaise idée. Comprends bien que si, pour je ne sais quelle raison saugrenue, on se limitait tous à des +, -, *, / ça nous prendrait toujours trois semaines pour faire un démineur.
    D'après mon expérience, ce qui distingue un programmeur experimenté d'un débutant, ce n'est pas de savoir programmer en C++ ou en Java, c'est d'avoir le réflexe de chercher des solutions existantes pour chaque besoin générique au lieu de réinventer la roue.
    Alors fais les choses bien et va donc apprendre à te servir de la classe vector !

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Autodidacte
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Autodidacte

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par défaut
    Merci pour ta réponse malgré qu'elle est un peu insultante...
    Je vais tenter de mieux m'expliquer.

    Tu as raison, les bibliothèques sont indispensables pour tout programmeurs et je n'ai pas peur de les utiliser dans mes programmes.
    Ce que j'aurais du préciser c que depuis que j'ai commencé à apprendre le C++ je m'amuse à faire ma propre bibliothèque standard et autre (peut-être est-ce ridicule, peut-être est-ce inutile).
    Même si elle est très loin d'égaler les "vrai" bibliothèques utilisées et améliorées par des milliers de programmeurs depuis des décénies, j'aime bien me dire "cette roue, c'est moi qui l'a inventée" même si les autres roues de mon chariot ont été inventées pas d'autres...

    "N'a tu jamais démonté un appareil électronique par curiosité ou tenté de jouer l'oeuvre d'un grand compositeur pour le plaisir?"

    J'ai fait ma propre classe string avec une variable membre pour contenir la taille de la chaine et je suis très satisfait du résultat.
    La seule chose qui me dérange c'est que les chaine de caractères qu'ont lui affecte doivent se terminer par un '\0' car sinon son comportement est imprévisible.
    Bien que je n'ai pas encore eu de problème à cause de ça, j'aimerais que la taille des chaines qui viennent de l'extérieur soit vérifiée pour plus de sécurité.

    C'est sur que c'est possible mais peut-être faut-il connaitre en détails l'implémentation du système d'exploitation (si c'est le cas, j'abandonne, je vais accepter les fonction prévues à cet effet en étant très heureux qu'elles existes), mais si c'était possible de le faire avec des connaissances moyennes ma curiosité prendrait le dessus.

    En bref...
    Si je dois apprendre l'algèbre en hiéroglyphes pour implémenter de telles fonctions, je vais immédiatement marquer cette conversation comme résolue et utiliser _msize, mais sinon j'aimerais qu'on m'explique comment faire.

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par Cbenlfun Voir le message
    je vais immédiatement marquer cette conversation comme résolue et utiliser _msize, mais sinon j'aimerais qu'on m'explique comment faire.
    Sauf que _mzise ne marchera pas... Il y a plein de façons d'avoir un pointeur qui est passé à ta fonction. Essaie par exemple ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    #include <malloc.h>
    #include <iostream>
     
    using namespace std;
     
     
    void f(char *titi)
    {
    	char *toto = new char[15];
    	char *tutu = (char*)_alloca(42);
    	char *tata = toto+1;
    	cout << _msize(toto) << endl;
    	cout << _msize(titi) << endl;
    	cout << _msize(tutu) << endl;
    	cout << _msize(tata) << endl;
    }
     
    int main()
    {
    	char titi[] = "Salut !";
    	f(titi);
    	return 0;
    }

    Et non, rien n'existe en standard pour connaître la taille d'un bloc mémoire.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Autodidacte
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Autodidacte

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par défaut
    Donc si je comprend bien, même les fonctions définies dans une quel conque bibliothèque ne peuvent régler mon problème et toute les classes string de tout le monde se fient sur le caractère '\0' pour repérer le dernier élément d'un tableau passé par un paramètre de type pointeur sur char?

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 480
    Par défaut
    Je ne peux que m'outrer en lisant une pareille bêtise :

    Citation Envoyé par zais_ethael Voir le message
    En dehors de ça, je ne peux que m'outrer en lisant pareille bétise.
    Quand on débute, on essaie surtout de comprendre comment ça marche, de la même manière que l'on apprend d'abord à écrire avant d'utiliser une machine à écrire. Nombreux sont les exercices où le recours aux bibliothèques extérieures toutes faites est interdit. Essayer de réinventer soi-même quelque chose, quand c'est pour l'exercice, est toujours bénéfique.

    À côté, tu t'apercevras très vite toi-même que « réemployer l'existant » a un coût. Il faut chercher la bonne bibliothèque, se l'approprier, s'y investir complètement pour maîtriser son API, qui bien souvent est mal documentée, et tout cela pour utiliser un produit dont tu n'as même pas la certitude qu'il est mieux écrit que ce que tu aurais toi-même fait. Il faut composer avec les bugs cachés puis, bien souvent, mettre en place des adaptateurs pour composer avec le fait que telle ou telle fonction n'est pas implémentée comme ton programme l'attend, si ce n'est pas implémentée du tout. Et en plus, tu ne peux pas répondre à l'avance de la pérénité dans le temps de cette bibliothèque.

    Après, impliquer une bibliothèque entière pour n'utiliser qu'un seul de ses modules ou de ses classes est aussi une hérésie. C'est une chose à laquelle on assiste de plus en plus souvent parce que les couches sont de plus en plus nombreuses, que l'utilisateur a de moins en moins le contrôle sur sa machine et parce que la course à la puissance (qui reste un bienfait par ailleurs) estompe les différences entre les implémentations à l'efficacité variable. Peu de gens savent encore si l'instance de leur objet dans la pile fait 256 octets ou 256 kilo-octets. Quand le projet gagne en importance, les dépendances s'accumulent et ça fait autant de ressources externes qu'il faut importer et installer avec ton projet. À l'inverse, une application d'importance moyenne capable de de n'utiliser que la bibliothèque standard et les appels systèmes facilitera énormément le travail des intégrateurs et des administrateurs systèmes, spécialement au niveau de la politique de sécurité.

    En général, je me définis une masse critique, au delà de laquelle je décide de recourir à une bibliothèque particulière et à partir de ce stade, j'essaie de l'utiliser massivement.

  7. #7
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Citation Envoyé par Cbenlfun
    Donc si je comprend bien, même les fonctions définies dans une quel conque bibliothèque ne peuvent régler mon problème et toute les classes string de tout le monde se fient sur le caractère '\0' pour repérer le dernier élément d'un tableau passé par un paramètre de type pointeur sur char?
    Ben oui.
    C'est décevant, hein ? Aucune magie.

    D'ailleurs, je viens de vérifier et la première chose que fait le constructeur de std::string(char* s) c'est un strlen sur s. (avec VS2008)

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Feo,
    Citation Envoyé par Arzar Voir le message
    Ben oui.
    C'est décevant, hein ? Aucune magie.

    D'ailleurs, je viens de vérifier et la première chose que fait le constructeur de std::string(char* s) c'est un strlen sur s. (avec VS2008)
    Ben oui, avec un char *, c'est le seul moyen. Comment voudrais-tu donc faire autrement ?

    Et tant que quelque part on utilise un char *, il faudra en passer par là.

  9. #9
    Membre averti
    Homme Profil pro
    Développeur Autodidacte
    Inscrit en
    Janvier 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Autodidacte

    Informations forums :
    Inscription : Janvier 2008
    Messages : 46
    Par défaut
    Dans ce cas, je vais laisser ma classe string comme elle est et passer à autres choses, mais par pure curiosité, quelqu'un pourrait-il m'expliquer grossièrement (si cela est possible) comment les fonctions de désallocation dynamique (comme l'opérateur delete[] par exemple) font pour libéré la bonne quantité de mémoire.

  10. #10
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Tout d'abord, les opérateur new() et delete() sous le capot font appel à malloc() et free().

    A la différence de malloc() et free(), pour new() et delete(), le compilateur rajoute automatiquement un appel aux constructeur et destructeur.

    Les blocs de mémoire alloués par malloc sont en général gérés dans une liste chainée gérée par le gestionnaire d'allocation (dans la librairie C ?).

    Quand tu demandes 16 octets à malloc(), celui ci en alloue 32 (par exemple). Il se garde les 16 premiers octets du bloc pour lui sa gestion interne et te donne un pointeur sur le 17eme octet (que tu crois être le 1er de la zone allouée). Parmi c'est 16 octets réservés au système (j'ai dit 16 pour fixer les idées mais cela peut être une autre valeur), on peut trouver la taille demandée, la taille allouée, le prochain bloc alloué, le précédent, un nombre magique permettant d'identifier le bloc, etc.

    Quand tu libères un bloc, tu donnes le pointeur à libérer, le système retranche les 16 octets pour retrouver le vrai bloc et retrouve les informations de gestion de la liste chainée.

    C'est pour cela qu'il ne faut jamais libèrer un pointeur non alloué par malloc ou alors modifier la valeur du pointeur à libérer (incrémenter le pointeur de 1 ou 2 par exemple). Dans ce cas, le système ne peut plus retrouver sa structure et dans le meilleur des cas, annonce une erreur ou alors se plante.

    Connaitre la taille du bnloc alloué est alors possible, il suffit de connaitre comment le système ajoute les informations de gestion qui sont avant le bloc de mémoire "utilisateur". Bien sûr cette méthode n'est pas portable d'un OS à l'autre et peut même évoluer entre les différentes versions d'un même OS.

    Donc c'est intéressant à regarder pour information personnelle mais il ne faut pas l'utiliser dans un vrai programme.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Par exemple, voici une explication de comment ça se passe dans la bibliothèque C++ de Microsoft:
    http://blogs.msdn.com/oldnewthing/ar.../03/66660.aspx

    Mais je reconnais que cette absence de méthode standard pour connaître la taille allouée est vraiment rageante, car ça t'oblige à rajouter ta propre gestion de la taille alors que la taille est déjà gérée au niveau inférieur. Résultat, ça fait une gestion redondante et tu te retrouves avec deux (ou plus)zones mémoire contenant la taille...
    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.

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Tout d'abord, les opérateur new() et delete() sous le capot font appel à malloc() et free().
    C'est faux.
    Ils font appels à operator new et operator delete, respectivement.

  13. #13
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Qui font eux même appels à malloc() et free() (selon les implémentations, sous gcc c'est le cas).

  14. #14
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par Goten Voir le message
    Qui font eux même appels à malloc() et free() selon les implémentations, sous gcc c'est le cas).
    Oui, selon les implémentations, justement.

    Sinon, la technique utilisée si tu fais une classe String, c'est de maintenir à jour la taille toi-même, à grands coups de strlen, d'addition, de soustraction...

  15. #15
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par Goten Voir le message
    Qui font eux même appels à malloc() et free() (selon les implémentations, sous gcc c'est le cas).
    Le code de l'opérateur ::new () dans la librarie C de Visual Studio 2005 fait lui aussi appel à malloc().

    Code Operateur global ::new() : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)
            {       // try to allocate size bytes
            void *p;
            while ((p = malloc(size)) == 0)
                    if (_callnewh(size) == 0)
                    {       // report no memory
                    static const std::bad_alloc nomem;
                    _RAISE(nomem);
                    }
     
            return (p);
            }

    Citation Envoyé par Alp Voir le message
    Oui, selon les implémentations, justement.
    Par contre, je suis bien d'accord c'est lié à l'implémentation.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  16. #16
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Souvent il est fait appel à malloc() et free() respectivement, mais vous pouvez lire la norme vous ne trouverez rien sur le fait qu'il faut faire appel à malloc() et free()

  17. #17
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Il n'a jamais été question du contraire d'ailleurs... j'ai bien précisé (et tu l'as souligné en rouge SELON les implémentations).

  18. #18
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Mais je reconnais que cette absence de méthode standard pour connaître la taille allouée est vraiment rageante, car ça t'oblige à rajouter ta propre gestion de la taille alors que la taille est déjà gérée au niveau inférieur. Résultat, ça fait une gestion redondante et tu te retrouves avec deux (ou plus)zones mémoire contenant la taille...
    Pas forcément dans le cas des types primitifs (voir peut-être dans le cas de certaines structures), ils n'ont pas de destructeur. Dans le cas où une plus grande quantité de mémoire que demandé est réservée le gestionnaire de mémoire n'a pas besoin de mémoriser le nombre initial.

  19. #19
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    operator new, ça se surcharge hein...

  20. #20
    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 Alp Voir le message
    Souvent il est fait appel à malloc() et free() respectivement, mais vous pouvez lire la norme vous ne trouverez rien sur le fait qu'il faut faire appel à malloc() et free()
    D'autant que tu peux avoir une gestion mémoire complètement différente : sur des systèmes embarqués, il y a souvent plusieurs pool mémoires, chacun gérant des blocs de taille fixe. L'allocation consiste alors à 'marquer' (derrière ce terme, tout ce que vous voulez) un bloc comme 'occupé' et la libération à le marquer comme disponible. Là, il n'y a plus d'intérêt à connaitre la taille de l'allocation demandée au moment de la libération.

    Tout ça pour dire que ca reste de la cuisine interne de l'implémentation de la gestion de la mémoire.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 7
    Dernier message: 10/01/2007, 15h07
  2. Changer la taille d'un tableau dynamique
    Par clem1313 dans le forum Langage
    Réponses: 1
    Dernier message: 28/02/2006, 01h57
  3. Réponses: 6
    Dernier message: 16/01/2006, 13h29
  4. Comment récupérer la taille d'un tableau dynamique ?
    Par Tchaill39 dans le forum Langage
    Réponses: 4
    Dernier message: 08/12/2005, 14h21
  5. Connaitre la taille d'un tableau dynamique
    Par lewellah dans le forum C
    Réponses: 2
    Dernier message: 23/09/2005, 18h37

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