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

  1. #1
    Membre régulier 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
    Points : 88
    Points
    88
    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 éminent
    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 : 38
    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
    Points : 8 389
    Points
    8 389
    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 régulier 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
    Points : 88
    Points
    88
    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 éprouvé
    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 : 39
    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
    Points : 1 067
    Points
    1 067
    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
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  5. #5
    Membre régulier 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
    Points : 88
    Points
    88
    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 éprouvé
    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 : 39
    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
    Points : 1 067
    Points
    1 067
    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?
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  7. #7
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Spout Voir le message
    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?
    A mon avis, il faut d'abord un os 64 bits pour gérer 4760 millions d'octets. Plus de ram sera profitable mais, même en l'absence de RAM suffisante, l'allocation peut réussir (mémoire virtuelle+swap), ça dépend.

  8. #8
    Membre régulier 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
    Points : 88
    Points
    88
    Par défaut
    Je travaille sur Win xp 32 bits avec une machine équipée de 1go de Ram.
    ça plante avec une taille de 38 594 844
    ça passe avec 30 457 380

    Il doit allouer en fonction de la place disponible je pense....
    Sur une autre machine plus puissante (2Go de ram) le même programme ne plante pas pour les mêmes valeurs, il est capable d'encaisser des valeurs supérieurs.

    En tout cas merci pour votre aide

  9. #9
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    A la relecture de ces derniers fils, je crois qu'on a fait une petite erreur :
    @spout sizeof(shortString) == 17 et pas 8x17. D'où toutes les valeurs sont sur-estimées
    @yoshï : 38 594 844 * 17 = 625 Mo. Je suis un peu surpris que l'allocation échoue sur ton PC à 1 Go. Mais, bon, pourquoi pas.

  10. #10
    Membre éprouvé
    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 : 39
    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
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    @spout sizeof(shortString) == 17 et pas 8x17. D'où toutes les valeurs sont sur-estimées
    j'ai honte d'avoir mélangé bits et octets
    Merci pour cette correction
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

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