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 :

problème d'écrasement mémoire ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut problème d'écrasement mémoire ?
    Bonjour, je développe un code avec Visual 2005 et j'ai un problème que je n'ai encore jamais rencontré.

    Voici mon code qui pose souci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	for(int i = ibegin ; i < iend ; i += step)
    	{
    		_def.push_back(lambda[i]);
    		_sigma.push_back(sigma[i]);
    		_t.push_back(temps[i]);
    		_T.push_back(Tcarac);
    		_V.push_back(vitesse_moy);
    	}
    _def, _sigma, _t, _T, _V, lambda, sigma, temps sont des std::vector<double>, Tcarac et vitesse_moy sont des doubles

    Le problème est le suivant : au début, _def, _sigma, _t, _T et _V sont vides. J'arrive dans ma boucle for(). Au moment où je suis à la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _t.push_back(temps[i]);
    _t se remplit de la valeur temps[i] (donc c'est normal) mais _T aussi !

    si je mets la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _t.push_back(temps[i]);
    en commentaire, _T ne se remplit pas de la valeur Tcarac (donc _T est toujours vide)

    si je renomme _T en _TT (par exemple), le problème disparaît (_t se remplit de la valeur temps[i] et _TT de la valeur Tcarac : bref le comportement est normal).

    Quelqu'un aurait-il une idée ?

    Merci d'avance

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par salseropom Voir le message

    Quelqu'un aurait-il une idée ?
    Regarder la sortie du preprocesseur? _T et _V sont des noms reserves dans tous les contextes, _def, _sigma, _t dans certains, ca ne m'etonnerais pas qu'un entete les utilise pour un objectif rentrant en conflit avec toi.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    ok, j'ai renommé ma variable _t par _tps et le problème a disparu. Je devais bien avoir un conflit de variable.

    Ceci dit, que je renomme _t en _tps ou _T en _TT, le problème a disparu. Je trouve que c'est bizarre...

  4. #4
    zul
    zul est déconnecté
    Membre chevronné Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Par défaut
    Les noms commençant par _ et __ sont réservé pour les compilateurs / STL. A ne pas utiliser sous peine de comportements étranges (et dépendant du compilateur).

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par zul Voir le message
    Les noms commençant par _ et __ sont réservé pour les compilateurs / STL. A ne pas utiliser sous peine de comportements étranges (et dépendant du compilateur).
    Aïe, dans tous mes programmes, tous les attributs de mes classes commençent par un underscore... Ca me servira de leçon...

    En gros, pour reconnaître une variable si elle est un attribut de ma classe ou non, le mieux est donc de la faire terminer par un underscore (et non de la faire commencer).

    Comment faites-vous pour différencier un attribut d'une classe d'une "simple" variable ? Quelle convention utilisez-vous ?

    Merci

  6. #6
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    La convention que j'utilise :
    membre de classe : m_typeNomVariable
    variable globale : g_typeNomVariable
    variable locale : l_typeNomVariable
    paramètre de fonction : p_typeNomVariable

    exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    std::string m_strNom;
    int g_iProgramID;
    double l_dPrecision;
    const std::string & p_strNouveauNom
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par zul Voir le message
    Les noms commençant par _ et __ sont réservé pour les compilateurs / STL. A ne pas utiliser sous peine de comportements étranges (et dépendant du compilateur).
    Les noms contenant un double underscore (pas uniquement au debut) sont reserves dans tous les contextes.

    Les regles sont un peu plus complexes pour les noms commencant par un seul underscore. La seule exception que je retiens c'est que comme nom de membre ca passe si le caractere qui suit est une minuscule, parce que c'est une convention commune -- meme si je ne l'applique pas.

    Citation Envoyé par salseropom Voir le message
    Aïe, dans tous mes programmes, tous les attributs de mes classes commençent par un underscore... Ca me servira de leçon...
    Voir ci-dessus.

    En gros, pour reconnaître une variable si elle est un attribut de ma classe ou non, le mieux est donc de la faire terminer par un underscore (et non de la faire commencer).
    C'est une autre convention.

    Comment faites-vous pour différencier un attribut d'une classe d'une "simple" variable ? Quelle convention utilisez-vous ?
    Quelques conventions que j'ai vues:
    - _ en prefixe
    - _ en suffixe
    - my/our en prefixe (permet en plus de differentier statique ou pas)
    - m_ en prefixe
    - pas de marquage particulier, les noms locaux sont declares suffisemment pres, les autres noms sont marques.

Discussions similaires

  1. problème d'écrasement mémoire
    Par salseropom dans le forum C
    Réponses: 14
    Dernier message: 31/07/2008, 14h52
  2. FIREBIRD + APPLI EN C : Problèmes de libération mémoire
    Par lio33 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 16/09/2005, 09h07
  3. Problème de fuite mémoire sur un idFTP
    Par jeromelef dans le forum Composants VCL
    Réponses: 6
    Dernier message: 26/07/2005, 17h29
  4. Réponses: 25
    Dernier message: 16/07/2003, 20h41
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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