Seite 1 von 1

Crash bei Pointer-Kopie in Singleton

Verfasst: 31. August 2007 15:26
von solarix
... hoert sich seltsam an.. ist es aber auch:

Folgende Anwendung:
* eine Source-File: main.cc
* darin deklariert (und definiert) :
1. eine Singleton-Klasse, welche einen QWidget* speichert
2. eine von QApplication-abgeleitete, eigene "MyApp"

Code: Alles auswählen

#include <QtCore>
#include <QtGui>

/*===========================================================================*\
**	Class Singl (Test-Singleton)
\*===========================================================================*/
class Singl
{
  public:
   static Singl *Instance();
   void setWin(QWidget *w);

  private:
   Singl();

   QWidget *mWin;  
   static Singl *mInst;
};

Singl *Singl::mInst = NULL;
Singl *Singl::Instance()
{
  if (!mInst)
    mInst = new Singl();
  return mInst;
}

void Singl::setWin(QWidget *w)
{
  mWin = w;
}

Singl::Singl() {}

/*===========================================================================*\
**	Class MyAppli (Test-Applikation)
\*===========================================================================*/
class MyAppli : public QApplication
{
  public:
    MyAppli(int argc, char *argv[]);
};

MyAppli::MyAppli(int argc, char *argv[])
 : QApplication(argc, argv)
{
}

/*===========================================================================*\
**	main
\*===========================================================================*/
int main(int argc, char *argv[])
{
  // QApplication appli(argc,argv); // alles geht gut
  MyAppli appli(argc,argv);         // crash bei appli.exec()
  QWidget *mainConsole = new QWidget();
  mainConsole->show();
  Singl::Instance()->setWin(mainConsole);
  return appli.exec();
}
Der ganze Kram crashed in genau einem Fall:
1. appli muss vom Typ "MyAppli" sein,
2. Pointer "mainConsole" muss in einer Singleton-Klasse gespeichert werden.

Ist eine der beiden Bedingungen nicht erfuellt (z.B. appli vom Typ "QApplication" oder mainConsole in einer "normalen" Klasseninstanz gespeichert) funktioniert das Programm problemlos..


Reproduziert mit Qt 4.3.1, Linux, g++-4.1

comments? hints?

Verfasst: 31. August 2007 17:06
von Zandru
äusserst seltsam.

schick das doch mal an qt-bugs@trolltech.com (und erwähne dabei noch genauer dein buildsystem, damit die das nachstellen können) hast du noch andere Unixe um das zu testen? (Oder auch nur einen anderen Rechner?)

Verfasst: 31. August 2007 17:23
von solarix
ja.. diverse.. Ich denke nach ein paar Tests auf Solaris 9 und OsX kann ich mehr darueber aussagen...