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 :

Fonction de Hashcode Debug/Release


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Par défaut Fonction de Hashcode Debug/Release
    Bonjour,

    J'ai cette fonction de hashcode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    unsigned long HashCode(const char *string)
    {
        long HashCode = 0;
        while (*string)
        {
            int i = *(int *)string;
            HashCode ^= i;
            HashCode <<= 1;
            string ++;
        }
        return HashCode < 0 ? (unsigned long)(-HashCode):(unsigned long)(HashCode);
    }
    Cette fonction n'a pas le même comportement en Debug et en Release.
    En Debug a chaque fois que je lance mon appli, pour une même string j'obtiens le même hashcode.
    En Release a chaque fois que je lance mon appli, pour une même string j'obtiens à chaque fois un hashcode différent.

    Une piste ?? Je ne comprends vraiment pas d'où ça vient.
    Merci.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Le problème viens de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int i = *(int *)string;
    car arrivé au dernier caractère, des octets vont être lus en dehors de la chaine.

  3. #3
    Membre confirmé Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Par défaut
    Je ne vois pas trop pourquoi, la boucle s'arrête sur cette condition avant : while (*string)
    Ma string est null terminated.

    Edit : OK je crois que je viens de comprendre, le int est sur 4 octets, le char sur un octet. Au dernier caractère lu, en fait on va lire le 0 et les deux caractères suivants. Merci pour ta réponse, je vais voir si c'est ca.

  4. #4
    Membre confirmé Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Par défaut
    C'était bien ca. Merci !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/07/2006, 11h33
  2. Réponses: 5
    Dernier message: 21/06/2006, 14h02
  3. Passage Mode debug -> release
    Par Bayard dans le forum MFC
    Réponses: 2
    Dernier message: 08/05/2006, 13h06
  4. Réponses: 3
    Dernier message: 18/08/2005, 10h17
  5. chargement DLL mode debug/release
    Par bihorece dans le forum C++Builder
    Réponses: 3
    Dernier message: 21/06/2004, 14h05

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