Инициализация переменной не происходит повсеместно на определенных платформах - PullRequest
3 голосов
/ 09 октября 2010

У меня есть программа, которую я создал для 32-битной RHEL5 и 64-битной ubuntu10 (c ++ qt4.6). Когда я запускаю программу в Ubuntu, все переменные инициализируются, и мне не нужно кодировать эту инициализацию. Но когда я запускаю программу на RHEL, некоторые переменные не инициализируются, я заметил, что они в основном целочисленные, а типичные значения - около 154280152. Самое смешное, что это просто происходит в нескольких классах. Как это может быть?

обновление: вот фрагмент кода, это заголовок одного из классов, где это происходит (извините за макет, который я сейчас изучаю): <br> #ifndef FCP_CONFIG_H<br> #define FCP_CONFIG_H<br> #include "ui_fcpConfig.h" #include <br> #include "fpsengine.h"<br> #include "fcp_cfg_delegate.h"<br> #define SET_COL 3<br> #define GLOBAL_KEY_COL 2<br> #define LOCAL_KEY_COL 1<br> #define ENABLE_COL 0<br> namespace Ui<br> {<br> class fcpConfig;<br> } </p> <pre><code>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

1 Ответ

10 голосов
/ 09 октября 2010

Разные компиляторы делают разные вещи. Стандарт не устанавливает, что все переменные должны инициализироваться автоматически , поэтому многие компиляторы этого не делают.Это означает, что они обычно заполнены мусором.Иногда вам везет, и вы получаете блок нулей, но это редко.Не рассчитывай на это.

...