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 :

Etat initial déclaration


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 113
    Par défaut Etat initial déclaration
    Bonjour,

    Je n'arrive pas à trouver de réponse à cette question toute simple :

    Je déclare une structure simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct maStruct{
    	uint32 size;
    	void *array;
    };
    Si je cré un tableau de maStruct :
    Comment sont les éléments de la structure à l'etat initial ? Est-ce que cela peut prendre n'importe quelle valeur ou est-ce que cela met d'office les "size" à 0 et les *array à NULL ?

    MErci :/

  2. #2
    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
    Quand on met du code, c'est le bouton # (balises [code][/code] et pas [quote][/quote])

    Ceci dit, si tu crées un tableau de structures, comme tu l'as fais, elles ne sont pas initialisées, elles contiennent donc des valeurs aléatoires.

    Comme on est en C++, c'est le rôle des constructeurs que d'initialiser la structure.
    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
    .

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 113
    Par défaut
    MErci beaucoup pour la réponse.
    Désolé pour les quote

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 113
    Par défaut
    Re...

    Est-ce que c'est different dans le cas d'un membre static de classe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    struct DynamicArrayCache{
    	uint32 size;
    	void *array;
    };
     
    class DynamicArray{
    	public:
    	(...)
    	   static DynamicArrayCache cacheList[];
    };
     
    DynamicArrayCache DynamicArray::cacheList[5000];
    En parcourant les 5000 éléments j'ai systematiquement 0 pour size et array. Est-ce que je peux y faire confience pour la suite de mon prog ?

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Quand on met du code, c'est le bouton # (balises [code][/code] et pas )

    Ceci dit, si tu crées un tableau de structures, comme tu l'as fais, elles ne sont pas initialisées, elles contiennent donc des valeurs aléatoires.

    Comme on est en C++, c'est le rôle des constructeurs que d'initialiser la structure.
    Non.
    Ici, il n'y aucun constructeur explicite, donc le compilateur va en définir un et initialiser toutes les variables membres à des valeurs par défaut (0 en général).
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 113
    Par défaut
    Bonsoir,


    Ha ok, donc si je decrare un constructeur à ma structure (en gros une classe quoi) mais que j'initialise pas, alors les membres peuvent avoir n'importe quelle valeur ?

    Est-ce que l'initialisation automatique dans le cas d'une structure n'a pas tendence à consomer d'avantage de ressources que si s'etait une classe avec un constructeur déclaré mais qui n'initialise rien ?

  7. #7
    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 Davidbrcz Voir le message
    Non.
    Ici, il n'y aucun constructeur explicite, donc le compilateur va en définir un et initialiser toutes les variables membres à des valeurs par défaut (0 en général).
    Es tu sûr ? Je viens de créer un exemple et j'ai bien un tableau de valeurs non initialisées (qui semble aléatoire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    struct maStruct{
    	int size;
    	char t_array;
    	unsigned char t_array2;
    };
    int _tmain(int argc, _TCHAR* argv[])
    {
    maStruct m_tbl[10];
    printf("%d %d %d\n", m_tbl[0].size, m_tbl[0].t_array, m_tbl[0].t_array2);
    	return 0;
    }
    Le résultat :
    -858993460 -52 204
    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
    .

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 113
    Par défaut
    Curieux ça...

    J'ai fais le test avec 5000 lignes dans mon exemple precedent avec un tableau static et tout est à 0....

  9. #9
    Membre éprouvé
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    189
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 189
    Par défaut
    ram-0000, est tu sûr d'avoir compiler en C++ ? Car je vois un beau printf et rien de ++ only.

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Ca dépend de l'implémentation. Donc a compilo différent résultats différents, a options différentes résultats différents. J'ai pas la norme sous la main pour vérifier mais il me semble que c'est ce qui a était dit récemment..

  11. #11
    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 seal3 Voir le message
    Curieux ça...

    J'ai fais le test avec 5000 lignes dans mon exemple precedent avec un tableau static et tout est à 0....
    Le cas du static est différent, ton tableau est placé dans un segment mémoire particulier qui lui est initialisé à 0 par le loader du programme. Ce n'est pas tout à fait pareil que pour des variables locales sur la pile
    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
    .

Discussions similaires

  1. [WD18] Etat initial d'un bouton dans un ruban
    Par jacquesprogram dans le forum WinDev
    Réponses: 2
    Dernier message: 12/09/2013, 17h24
  2. Etat initial mutex
    Par thierryG dans le forum Windows
    Réponses: 3
    Dernier message: 18/10/2007, 21h31
  3. Réponses: 4
    Dernier message: 12/03/2006, 20h47
  4. Réponses: 8
    Dernier message: 06/03/2006, 14h44
  5. Réponses: 8
    Dernier message: 17/05/2002, 09h08

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