[SOLVED}Strange behaviour of initialization in constructor...
-
Dear Forumers, I tryed to initialize some arrays of my Widjet class and come up with unexpected result. Fortunately I could remove all another parts of my codes and get the same. Where am I wrong (please, take a look in codes and output below):
//main.cpp
@#include "myWidget.h"int main(int argc, char **argv){
QApplication app(argc, argv);
myWidget *my_widget = new myWidget;my_widget -> show();
return app.exec();
}
@
//myWidget.h
@#ifndef MYWIDGET_H
#define MYWIDGET_H#include <QApplication>
#include <QMainWindow>#include <QDebug>
class myWidget : public QMainWindow
{
Q_OBJECTpublic:
myWidget( QWidget *parent = 0 );
float Modl_V_set[2][18][8];
float Modl_I_set[2][18][8];
QString Modl_S_set[2][18][9];};
#endif // MYWIDGET_H
@
//myWidget.cpp
@#include "myWidget.h"///////////////////////////////////////////////////////////////////////////////
myWidget::myWidget(QWidget *parent) : QMainWindow(parent)
{
// qDebug() << "constructor: start";
// qRegisterMetaType<QItemSelection>();
for ( int n_can = 0; n_can < 2; n_can++ ) {
for ( int n_modl = 0; n_modl < 18; n_modl++ ) {for ( int n_row = 0; n_row < 8; n_row++ ) {
Modl_V_set[n_can][n_modl][n_row] = 0;
Modl_I_set[n_can][n_modl][n_row] = 0;
Modl_S_set[n_can][n_modl][n_row] = "OFF";
}
Modl_S_set[n_can][n_modl][8] == "ONN";
qDebug() << "Modl_S_set[" << n_can << " ][ "
<< n_modl << "][8] == "
<< Modl_S_set[ n_can ][ n_modl ][8];
qDebug() << "Modl_S_set[" << n_can << " ][ "
<< n_modl << "][7] == "
<< Modl_S_set[ n_can ][ n_modl ][7];}
}
}
@
OUTPUT:
@slowcontrol@FODS-66-019:24:11> ./test_QString 14-04-28
Modl_S_set[ 0 ][ 0 ][8] == ""
Modl_S_set[ 0 ][ 0 ][7] == "OFF"
Modl_S_set[ 0 ][ 1 ][8] == ""
Modl_S_set[ 0 ][ 1 ][7] == "OFF"
Modl_S_set[ 0 ][ 2 ][8] == ""
Modl_S_set[ 0 ][ 2 ][7] == "OFF"
Modl_S_set[ 0 ][ 3 ][8] == ""
Modl_S_set[ 0 ][ 3 ][7] == "OFF"
Modl_S_set[ 0 ][ 4 ][8] == ""
Modl_S_set[ 0 ][ 4 ][7] == "OFF"
Modl_S_set[ 0 ][ 5 ][8] == ""
Modl_S_set[ 0 ][ 5 ][7] == "OFF"
Modl_S_set[ 0 ][ 6 ][8] == ""
Modl_S_set[ 0 ][ 6 ][7] == "OFF"
Modl_S_set[ 0 ][ 7 ][8] == ""
Modl_S_set[ 0 ][ 7 ][7] == "OFF"
Modl_S_set[ 0 ][ 8 ][8] == ""
Modl_S_set[ 0 ][ 8 ][7] == "OFF"
Modl_S_set[ 0 ][ 9 ][8] == ""
Modl_S_set[ 0 ][ 9 ][7] == "OFF"
and so on...slowcontrol@FODS-66-019:24:15>
@
Thank you for help in advance. -
What output would you have expected ???
@for ( int n_can = 0; n_can < 2; n_can++ ) {
for ( int n_modl = 0; n_modl < 18; n_modl++ ) {
for ( int n_row = 0; n_row < 8; n_row++ ) {
Modl_V_set[n_can][n_modl][n_row] = 0;
Modl_I_set[n_can][n_modl][n_row] = 0;
Modl_S_set[n_can][n_modl][n_row] = "OFF";
}
Modl_S_set[n_can][n_modl][8] == "ONN";
qDebug() << "Modl_S_set[" << n_can << " ][ "
<< n_modl << "][8] == "
<< Modl_S_set[ n_can ][ n_modl ][8];
qDebug() << "Modl_S_set[" << n_can << " ][ "
<< n_modl << "][7] == "
<< Modl_S_set[ n_can ][ n_modl ][7];
}
}@ -
Hi,
On a side note, you have a memory leak in your main, you don't delete my_widget before ending the main function.
-
Hi, SGaist, thank you for a side note. It would be nice if you explain me a little more detailed what do you mean. I thought that in main I haven't do anything exept issueing
@my_widget -> show();@In myWidget class I keep an eye on it and make appropriate deletes. What have I to do in main ? Do I need to make
@delete my_widget;@
after issueing
@my_widget -> show();@
I tryed and found that the window disappeared from screen as I expected. Maybe you mean something else ?
-
Let's use your application as the example:
Following your technique:
@int main(int argc, char **argv){
QApplication app(argc, argv);
myWidget *my_widget = new myWidget; << heap allocationmy_widget -> show();
int ret = app.exec();
delete my_widget; << delete once it's done
return ret;
}@The Qt way:
@int main(int argc, char **argv){
QApplication app(argc, argv);
myWidget my_widget; << stack allocation
my_widget.show();return app.exec();
}@