Même code, résultat différent selon compilateur

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Hello,

j'ai une fonction très simple qui liste les modules charger dans un processus.

Le truc c'est que si je compile avec VS 2013 tout fonctionne, mais si je compile avec Orwell++ il me liste uniquement trois modules (alors qu'il y en a plus de 20).

La fonction en question :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
void listModule()
{
    HANDLE module = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pId);
    MODULEENTRY32 mEntry;
    mEntry.dwSize = sizeof(MODULEENTRY32);

    do
    {
        std::cout << mEntry.szModule << std::endl;
    } while (Module32Next(module, &mEntry));
}

Une idée ?

Édité par Coyote

Le problème peut venir de plusieurs sources : ton code (en cas de comportement indéterminé), la compilation en elle-même ou les librairies avec lesquelles ton code est linké.

Un test simple serait de désassembler les deux versions de ta fonction pour regarder les éventuelles différences. S'il n'y a pas de différences significatives, il faudra probablement regarder du côté des librairies.

Il est aussi possible de compiler ta fonction en un .obj (une version par compilateur) et de faire faire l'étape de link à l'autre compilateur. Tu aura donc 4 versions de ton programme, ce qui te permettra sûrement de trouver facilement la source de ton problème.

+0 -0
Auteur du sujet

re(Bonjour);

problème résolu, je n'ai pas fais ce que tu m'as conseillé Berdes car j'ai aucune idée de comment faire ça (sauf désassembler, mais comparer les deux est impossible pour moi). Je viens de passer une heure à bidouiller un peu tout et la ça fonctionne.

Par contre j'ai aucune idée de pourquoi, je crois que c'est parceque j'ai basculé sur TDM-GCC 32bits au lieu du 64.

En tout cas merci :)

Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte