Crash bei Pointer-Kopie in Singleton

Alles rund um die Programmierung mit Qt
Antworten
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Crash bei Pointer-Kopie in Singleton

Beitrag 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?
Zandru
Beiträge: 84
Registriert: 29. Mai 2007 15:35

Beitrag 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?)
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

ja.. diverse.. Ich denke nach ein paar Tests auf Solaris 9 und OsX kann ich mehr darueber aussagen...
Antworten