2010-10-08 29 views
3

J'ai un programme que j'ai construit pour RHEL5 32 bits et Ubuntu10 64 bits (C++ qt4.6). Quand je lance le programme sur ubuntu, toutes les variables sont initialisées sans que je doive coder cette initialisation. Mais quand j'exécute le programme sur RHEL, certaines des variables ne sont pas initialisées, j'ai remarqué qu'elles sont principalement de type entier et les valeurs typiques sont autour de 154280152. La chose amusante est que cela arrive juste dans quelques classes. Comment se peut-il?L'initialisation des variables ne se passe pas partout sur certaines plates-formes

mise à jour: voici un extrait de code, il est l'en-tête de l'une des classes où ce qui se passe (désolé pour la mise en page Je suis à la recherche dans ce moment):
#ifndef FCP_CONFIG_H
#define FCP_CONFIG_H
#include "ui_fcpConfig.h" #include
#include "fpsengine.h"
#include "fcp_cfg_delegate.h"
#define SET_COL 3
#define GLOBAL_KEY_COL 2
#define LOCAL_KEY_COL 1
#define ENABLE_COL 0
namespace Ui
{
class fcpConfig;
}

class fcpConfig : public QWidget 
{ 
Q_OBJECT 

public: 
fcpConfig(QWidget *parent, FPSengine * FPS); 
Ui::fcpConfigForm ui; 
void setupFcpCfg(); 

private: 
QWidget * myParent; 
FPSengine * myFPS; 

fcpCfgDelegate delegate; 
QList<QSpinBox*>failOrderList; 
QList<QRadioButton*>primaryList; 

int numFCP; 
QList<int>numFcpInEachSet; 
int currentSet; 

void updateSets(); 
void refreshFailorderDuringUserEdit(int fcpPos); 
QSignalMapper * signalMapper; 
QMutex mutex; 
void sendSysStatusMsgAndPopup(QString msg); 
int curSet; //the connected Fcp's Set 

private slots: 

void updateFcpFailOrderSpinBox(int absPos); 
void on_twFCP_cellClicked(int row, int column); 
void on_buttonBox_clicked(QAbstractButton* button); 

private: 
template <class T> 
    void buildObjList(QObject * location,QList<T> *cmdEleList,QString objName, int numObj){ 
     T pCmdEle; 
     cmdEleList->clear(); 
     for(int i=0;i<numObj;i++){ 
      pCmdEle = location->findChild<T>(objName+QString("%1").arg(i+1)); 
      cmdEleList->append(pCmdEle); 
     } 
    } 

//used to send SysStatus and popuMsg when number of active Fcps in Set not 1 
QString activeList; //build a string representing Fcp numbers that are active. 
int iNumActive; 
}; 
#endif // FCP_CONFIG_H 

+3

Postez votre code, il est très difficile d'aider autrement. –

+2

Les variables non initialisées peuvent contenir * n'importe quoi *. Il peut toujours être zéro sur certaines plateformes, mais votre code ne devrait jamais compter dessus. –

+1

Toutes les questions sur les SO ne proviennent pas d'un petit projet. Faites-le descendre jusqu'à un petit reproducteur, postez le code, vous obtiendrez probablement des réponses plus significatives. –

Répondre

10

différents compilateurs font différents des choses. La norme n'indique pas que toutes les variables doivent être initialisées automatiquement, ce qui n'est pas le cas de nombreux compilateurs. Cela signifie qu'ils sont généralement remplis de déchets. Parfois, vous avez de la chance et obtenez un bloc de zéros, mais c'est rare. Ne comptez pas dessus.

+6

Toujours, toujours, toujours initialiser les variables. Ensuite, même si votre code est incorrect, au moins, il est également cohérent. –

+1

Initialiser les variables! Votre vie peut en dépendre. – karlphillip

+2

@yan La norme n'indique pas qu'elle doit être aléatoire non plus. –