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 :

c++ taille max d'une structure


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut c++ taille max d'une structure
    bonjour ;
    je travaille sur un simulateur (OMNET++) qui est basé sur le langage C++.

    j'ai déclaré une structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    struct neighborRec //table de voisinage
    {
    	int id;
    	double cost;
    	int Last_nMess;
    	bool failure;
            int NBMess;
    	int NLMess;
    	int NRMess;
    	int Pairwise_key;
    	int Cluster_key;   //un pb
    	}; 
     
    vector <neighborRec> NeighborsTable;
    mais j'ai un petit problème.La valeur du dernier champ( Cluster_key) est toujours remplacée par celle du 1er champ (id) du voisin suivant dans "NeighborsTable".
    est-ce que "struct" a une taille max limité ? et comment faire pour résoudre ce problème ?

    merci d'avance

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    Bonjour,

    fort heureusement il n'y a pas de taille max

    La valeur du dernier champ( Cluster_key) est toujours remplacée par celle du 1er champ (id) du voisin : lorsque vous faites quoi ?

    est-ce que par hasard vous auriez modifié la définition de votre structure sans que toutes les re-compilations nécessaires n'ai pas été faites ?

    ou alors y aurait-il une incohérence entre la définition de la structure C++ et la description donnée à OMNet++ (que je ne connais pas) ?
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut
    Citation Envoyé par bruno_pages Voir le message
    Bonjour,



    La valeur du dernier champ( Cluster_key) est toujours remplacée par celle du 1er champ (id) du voisin : lorsque vous faites quoi ?
    --après le remplissage de la table de voisinage ,et quand j'affiche le résultat ,je remarque sa.

    est-ce que par hasard vous auriez modifié la définition de votre structure sans que toutes les re-compilations nécessaires n'ai pas été faites ?
    [/quote]
    --non non .j'ai re-compilé plusieurs fois,mais c'est toujours la meme chose .

    ou alors y aurait-il une incohérence entre la définition de la structure C++ et la description donnée à OMNet++ (que je ne connais pas) ?[/quote]
    --non je pense pas .je t'invite a voir le site : http://www.omnetpp.org/

  4. #4
    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
    Bonjour, et bienvenue sur le forum.

    Normalement, cela ne devrait pas arriver, car il n'y a pas (ou pour ainsi dire) de taille limite à une structure (en tout état de cause, cette structure est très loin d'avoir atteint la limite "de compatibilité minimale" de 262 144 byte pour un objet ou de 16 384 membres dans une même structure).

    Si on écarte d'office l'hypothèse que la déclaration de la structure est différente pour omnett++ et pour la partie en C++ (je ne le fais que pour me permettre d'évoquer d'autres possibilités, mais ce serait pourtant l'hypothèse la plus plausible ), il nous reste une quantité d'autres hypothèses à envisager:
    1. Le "remplissage" et/ou l'accès au données se fait à coup de transtypage (cast) et la logique de l'un ne correspond pas à la logique de l'autre
    2. Les règles d'alignement des données utilisées par omnett sont différentes de celles utilisées par le compilateur C++ (je pense, entre autre, à la taille réellement prise par un double ou un booléen, vu que tous les autres champs sont de type int)
    3. la taille des types primitifs (encore une fois, je pense en priorité au double et au booléens) utilisés par omnett et par le compilateur sont différentes.


    Pourrais tu donc, en priorité, nous donner le code utilisé pour remplir tes données et le code utilisé pour y accéder

    Sans ces deux derniers, il nous sera impossible de t'aider car ton problème n'est en aucun cas du à la taille de la structure (ce qui ne veut absolument pas dire que nous n'aurons pas besoin d'autre chose, mais simplement qu'il faut bien commencer nos investigations quelque part )

    Maintenant, ce qui serait intéressant de savoir, c'est ce qui peut se passer au niveau des... éléments suivants du tableau.

    Si tu as, par exemple, un tableau de 5 éléments, remarque-t-on que la valeur de cluster_key de l'élément N est toujours remplacée par la valeur de id de l'élément N+1, ou constate-t-on à chaque fois un décalage supplémentaire des données
    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

  5. #5
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Est-ce bien la classe std::vector<> de la STL qui est utilisée ou une classe "maison"?

  6. #6
    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
    Peux-tu montrer comment tu remplis ton vecteur ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut
    En premier lieu,je tien a vous dire que je suis entrain de simuler un protocole de routage sécurisé dans les réseau ad hoc. Mon réseau est composé de noeuds .la table de voisinage de chaque noeud contient les voisins direct de ce noeud (il sont ajouter au fur et a mesure durant une phase appelé phase de découverte des voisins).
    et les infos concernant chaque voisin sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct neighborRec //table de voisinage
    {
    	int id;
    	..
            ..
    	int NRMess;
    	int Pairwise_key;
    	int Cluster_key;
    	};
    vector <neighborRec> NeighborsTable;
    vector est la classe STL de C++.

    quand un noeud découvre un voisin : il remplit ces champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    neighborRec Neigh;
    Neigh.id=identifier;
    Neigh.Last_nMess=0;
    Neigh.NLMess=0;
    ..
    Neigh.Cluster_key= cluster; //cluster est de type int
    a l'exécution (ajout de chaque noeud dans la table voisinage)j'ai les résultats suivants:
    la construction de la table de voisinage du noeud 1 :

    1er noeud ajouté:

    ma nouvelle TV est la suivant
    id:0 cle de cluster:393221 cle par paire:133 last nmss0

    //la valeur de cle de cluster est érroné

    2eme noeud ajouté:
    ma nouvelle TV est la suivant
    id:0 cle de cluster:3 cle par paire:133 last nmss0
    id:3 cle de cluster:720937 cle par paire:137 last nmss0

    // cle de cluster de (0)=id noeud (3). cle de cluster de (3)=valeur érroné.

    3eme ajout :
    ma nouvelle TV est la suivant
    id:0 cle de cluster:3 cle par paire:133 last nmss0
    id:3 cle de cluster:5 cle par paire:137 last nmss0
    id:5 cle de cluster:1331123269 cle par paire:139 last nmss0

    et ainsi de suite , mais ce que j'arrive pas a comprendre , c'est quand je permute int Pairwise_key avec int Cluster_key; dans structure alors c le champ Pairwise_key qui aura des valeurs érronés et le champ Cluster_key affichera les bon résultat .
    et si je supprime un champ de la structure (par exemple int NRMess )alors tout marche bien .
    c'est pour cela que je crois que c'est une question de taille limite .

  8. #8
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Ca n'est certainement pas un problème de taille, tu te doutes bien qu'il est très facile de se retrouver avec des classes bien plus grosses en terme de mémoire ou de nombre de membres.

    Non visiblement soit il y a un problème a la compilation/link, soit il se passe quelque chose de très louche. Je ne saurais pas dire quoi, peut être une macro quelque part qui fausse le code que tu as?

    Dans tous les cas, nous montrer le code qui manipule le vector aiderait a comprendre. Le code qui affiche le résultat aussi, il se peut que l'erreur soit là.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut
    j'ai trouvé le problème (probleme de linkage).
    en faite j'avais une autre classe (mon_module.h et autre_module.h) avec les mêmes déclarations de variables .

    struct neighborRec
    {
    ...
    };

    vector <neighborRec> NeighborsTable;


    sauf que dans (autre_module.h) ya pas les champs:
    int Pairwise_key;
    int Cluster_key;

    alors quand je fais Neigh.Pairwise_key=val; il donne des résultat érronés.

    j'ai juste renommé les variable de (mon_module.h) et ça marche nickel

    merci beaucoup pour votre aide

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

Discussions similaires

  1. Taille max d'une structure
    Par ImagingAllthe dans le forum MATLAB
    Réponses: 3
    Dernier message: 11/12/2008, 14h47
  2. Modif auto taille max d'une base
    Par al1EnC dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 17/11/2006, 15h36
  3. taille max d'une photo jpg dans un champ blob de mysql
    Par zidenne dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 04/10/2006, 09h42
  4. Taille max d'une image
    Par Risike dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 04/05/2006, 17h16
  5. [VBA] taille max d'une variable public
    Par gigs dans le forum Général VBA
    Réponses: 9
    Dernier message: 23/11/2005, 15h27

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