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 :

Identification de structure


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de yoshï
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 206
    Par défaut Identification de structure
    Bonjour,
    je rencontre un petit problème en debugant une application.
    J'ai un message d'erreur généré par MFC qui m'indique une erreur mémoire.

    Je ne suis pas très expérimenté en C
    Après une execution en mode pas à pas, j'en arrive à la conclusion qu'il plante sur l'instanciation suivante.
    dans le cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_oMessage = new shortString[len];
    dans le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef char shortString[17];
    shortString* m_oMessage;
    Je n'arrive pas à comprendre à quoi ressemble la structure m_oMessage.
    le type shortString est un tableau de 17 char.
    A quoi ressemble la structure m_oMessage?
    m_oMessage est à 2 dim? 17 lignes , len colonnes?
    Merci d'avance pour votre aide.... Faut vraiment que je me forme à ce langage

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    MFC c'est du C++ pas du C. C et C++ sont des langages aussi différentiables qu'on peut différentier les couleurs noir et blanc.

    new shortString[len] crée un tableau de len shortString. m_oMessage est un pointeur sur le premier élément de ce tableau.

    - m_oMessage[0] est un shortString
    - m_oMessage[0][0] à m_oMessage[0][16] sont des char.

    Pareil pour m_oMessage[1] à m_oMessage[len - 1].

    Consulte les cours de C++ relatifs aux tableaux et pointeurs.

  3. #3
    Membre confirmé Avatar de yoshï
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 206
    Par défaut
    Merci pour ta réponse.
    C'est bien ce que je pensais concernant la structure...
    m_oMessage est un pointeur vers un tableau de shortString
    et un shortString est un tableau de 17 char.

    Mais j'ai eu un doute car avec l'outil de visualisation de variable dans le debug

    quand on a un code:
    m_oMessage = new shortString[500];
    typedef char shortString[17];
    shortString* m_oMessage;
    m_oMessage pointe vers une structure à 17 cases et non 500... En toute logique m_oMessage devrait pointer vers une structure de 500 cases, chacune des cases contenant un shortstring (une chaine de 17 char)
    C'est bien ça?

  4. #4
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Citation Envoyé par yoshï Voir le message
    m_oMessage pointe vers une structure à 17 cases et non 500
    Les deux sont vrais.
    Ton pointeur m_oMessage pointe vers le premier shortString (= une structure de 17 char) d'une suite de 500 shortString.

    Conseil: utilise au moins des std::vector et peut-être des std::string, en fonction de ce que tu veux faire. Le conseil de Melem pour les cours est bien avisé également.

    Bon courage

  5. #5
    Membre confirmé Avatar de yoshï
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 206
    Par défaut
    Merci bcp pour votre aide .
    Je vais suivre votre conseil et me plonger dans les cours.
    J'ai juste une dernière petite question.

    Le programme plante (erreur mémoire) pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_oMessage = new shortString[len];
    avec len =35 000 000

    si len =20 000 000 le programme ne plante pas. D'après vous d'où vient cette limitation.
    le type char est contraint entre -128 et 127. Mais qu'est ce qui limite une structure de structure de char. En C++ les structures ne peuvent pas excéder une certaine taille mais je n'arrive pas à trouver cette limite. Est ce qu'elle est fonction de la mémoire disponible sur la machine ou elle est fixe (comme dans le cas d'un type contraint)

    Je sais pas si je suis clair

  6. #6
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Ta structure shortString fait 8x17=136 octets.
    Si tu en mets 20 millions à la suite, tu obtiens 2720 millions d'octets, soit environ 2 594 Mo.
    Si tu en mets 35 millions à la suite, tu obtiens 4760 millions d'octets, soit environ 4 540 Mo.
    Je dirais que ta limitation si situe au niveau de la taille disponible dans la RAM de ton PC. Combien en as-tu et quel système utilises-tu?

Discussions similaires

  1. Identification de structures
    Par habasque dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 22/08/2012, 11h02
  2. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 15h32
  3. [tables systèmes] extraction de la structure d'une base
    Par laffreuxthomas dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 23/03/2006, 13h24
  4. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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