Se connecter avec
S'enregistrer | Connectez-vous

Différences entre winXP et win7

Dernière réponse : dans Programmation

Bonjour,
J'appelle à l'aide car j'ai développé un code assez complexe en C++ qui marche très bien sous Windows XP (32 bits) mais déconne sous Windows 7 64 bits. Pour être plus précis, il s'agit d'un add-on pour Flight Simulator 2004. C'est une appli 32 bits, mais il fonctionne parfaitement sous Windows 7, même en 64 bits. Pour faire simple, l'add-on que j'ai développé modélise le fonctionnement d'un avion, et cet add-on est en fait une DLL qui est chargée par FS2004 quand l'utilisateur sélectionne l'avion pour voler avec. Tout marche bien, mais quand on sélectionne un autre avion ou qu'on quitte FS, la DLL est déchargée par FS et c'est là que ça déconne, sous Windows 7 seulement.
Comme il y a des libérations de mémoire à ce moment là (en particulier des delete), je me demandais si WinXP ne serait pas plus permissif que Seven sur la gestion de la mémoire, par exemple en pénalisant les double delete qui passent sous XP. J'ai beau chercher, je ne trouve pas...
Ma DLL a été générée à l'époque avec MS Visual C++ 2003, je l'ai entièrement recompilé avec Visual Studio 2008 et ça ne change rien.

Si vous connaissez des différences entre XP et Seven, en particulier sur la gestion de la mémoire en C++, je suis preneur.

Merci !!
Eric

Autres pages sur : differences winxp win7

Lassé par la pub ? Créez un compte

Désolé, je n'ai pas été très clair...
Quand je dis "ça déconne", ça signifie qu'au moment ou je sélectionne un autre avion ou que je quitte Flight Simulator (autrement dit, quand ma DLL est déchargée), ça fait planter Flight Simulator. A l'aide de traces, j'ai déduit que c'est dans le code qui s'exécute quand ma DLL se cloture que ça provoque le plantage. Et évidemment, on trouve surtout des libérations de mémoire dans cette partie du code, je delete toutes les instances de classe que j'ai crées, je cloture DirectSound, je ferme une socket et je ferme GDI+ (gdiplus shut down).

A force de chercher, j'ai trouvé qu'en n'omettant le delete d'une de mes classes, ça ne plante plus. C'est n'est pas propre, mais ça marche. Pourtant, le destructeur de ma classe ne fait pratiquement rien, je n'arrive pas à trouver le code incriminé. Je crois savoir que quand une DLL est déchargée, la libération mémoire est faite par l'OS, mais je préfèrerais avoir un code propre qui fait un delete pour chaque new.

Merci de votre aide,
Eric
Expert Programmation

Sinon pour éviter les double delete, la meilleure solution reste de ne plus utiliser delete dans ton code, mais d'utiliser des smart pointers genre std::unique_ptr ou std::shared_ptr (c++11 seulement). si tu ne peux pas utiliser de C++11, utilise Boost.

Sinon, si c'est des écritures dans des zones qui ne t'appartiennent pas, ça risque d'être difficile à déboguer si tu n'a pas un débogueur de mémoire genre valgrind mais qui tourne sous windows.

batchy a dit :
Sinon pour éviter les double delete, la meilleure solution reste de ne plus utiliser delete dans ton code, mais d'utiliser des smart pointers genre std::unique_ptr ou std::shared_ptr (c++11 seulement). si tu ne peux pas utiliser de C++11, utilise Boost.

Sinon, si c'est des écritures dans des zones qui ne t'appartiennent pas, ça risque d'être difficile à déboguer si tu n'a pas un débogueur de mémoire genre valgrind mais qui tourne sous windows.

Je vais regarder ça de près, je pense que les smart pointers sont la bonne solution. Merci de ton aide !!

Eric
Lassé par la pub ? Créez un compte