2010-08-28 5 views
0

Nous avons une application qui est écrite en VC++ en utilisant Visual Studio 2005, qui prend en charge plusieurs systèmes d'exploitation tels que Windows XP, Windows 2008, Windows 2003. La plupart du temps, la partie Serveur de l'application obtient installé sur Windows 2003/Windows 2008 et la partie Client est installée sur Windows XP. Le client et le serveur communiquent via des canaux nommés.Structure C++ non initialisée sur différents systèmes d'exploitation

Du côté client, nous avons créé une structure C++ et l'avons publiée sur le serveur en tant que message IPC. Lorsque nous déclarons structre dans la fonction et que nous ne l'initialisons pas, il arrive au serveur de certains clients alors que cela n'arrivera pas à partir d'autres clients. Les clients sont installés sur différentes machines Windows XP.

Maintenant, si j'appelle ZeroMemory() fonction sur cette structure et l'initialiser à zéro, le message IPC atteint au serveur de tous les clients. Ma question est, pourquoi unitialzied structre fonctionne sur certaines machines et ne fonctionne pas sur d'autres? J'ai beaucoup de curiosité sur la façon dont les structures non initialisées sont initialisées automatiquement par les systèmes d'exploitation.

+0

Publier du code. Vous ne pouvez pas vous attendre à faire quoi que ce soit avec des structures non initialisées sans éventuellement appeler UB. – dirkgently

Répondre

1

Les structures non initialisées ne sont pas initialisées par le système d'exploitation. Leurs membres ont toutes les valeurs qui se trouvent dans la mémoire en ce moment.

Essayer de faire quelque chose avec de la mémoire non initialisée peut entraîner des résultats imprévisibles.

+0

@sandeep: Notez que c'est ainsi que fonctionne C++, rien de spécifique au système d'exploitation. Toujours initialiser vos valeurs, sauf si vous savez qu'elles ne sont pas utilisées ou seront initialisées par le code que vous les transmettez. –

Questions connexes