Frage

Grüße alle,

Ich habe einen Code-Schnipsel wie folgt:

class AppCtx {

private:
 QMap<QString,IRzPlugin*> pluginsMap;

public :
 void addPlugin(IRzPlugin *plugin)
 {
   pluginsMap.insert(plugin->getPluginUID(),plugin);
 }

 QMap<QString,IRzPlugin*> & getPlugins()
 {
  return pluginsMap;
 }
}

In meinem Client-Code greift ich auf die QMap als follows.But die Pausen Anwendung wo es die 'plugins.size ()

zugreifen
class MainWindow
.
.

{
 void registerPlugins(AppCtx *appctx)
 {
   QMap<QString,IRzPlugin*> plugins=appctx->getPlugins();

   qDebug("Num of plugins %d",plugins.size()); //Breaks here

   QList<IRzPlugin*> listPlugins=plugins.values();

   for(int i=0;i<listPlugins.size();i++)
   {

   }
 }

Debug-Info ist unten angegeben:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fff057a16f0 (LWP 9069)]
0x0000000000406ba1 in QMap<QString, IRzPlugin*>::size (this=0x405c2b)
    at /opt/qtsdk-2010.02/qt/include/QtCore/qmap.h:178
178     inline int size() const { return d->size; }
(gdb) back
#0  0x0000000000406ba1 in QMap<QString, IRzPlugin*>::size (this=0x405c2b)
    at /opt/qtsdk-2010.02/qt/include/QtCore/qmap.h:178
#1  0x0000000000406736 in MainWindow::registerPlugins (this=0x7fff0d7c98f0)
    at /work/svn-checkout/osaka3d/osaka3d/tags/iter07/prototype/osaka3d/rinzo/ui/mainwindow.cpp:23


}

irgendwelche Tipps?

Vielen Dank im Voraus, umanga

War es hilfreich?

Lösung

Ich merke, Sie kopieren die QMap mit

QMap<QString,IRzPlugin*> plugins=appctx->getPlugins();

Ich nehme an, Sie ihm einen Verweis nehmen wollen d.

QMap<QString,IRzPlugin*>& plugins=appctx->getPlugins();

Wenn Sie nur einen Verweis auf const dann die docs sagen, dass es implizit geteilt wird, so dass es nicht so eine große Sache ist.

Wenn dies Ihr Problem hilft, dann muss es etwas sein, mit dem Kopieren des QMap zu tun.

Bearbeiten

Da dies nicht helfen, Ihr Problem, das ich glaube, Sie brauchen die Zeiger appctx zu überprüfen, die in registerPlugins übergeben werden und prüfen, ob es auf ein gültiges Objekt verweist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top