Question

Bonjour tous,

J'ai un extrait de code comme suit:

class AppCtx {

private:
 QMap<QString,IRzPlugin*> pluginsMap;

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

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

Dans mon code client j'accéder au QMap comme follows.But les pauses d'application où il accéder à la 'plugins.size ()'

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++)
   {

   }
 }

Infos de débogage est donnée ci-dessous:

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


}

des conseils?

Merci à l'avance, umanga

Était-ce utile?

La solution

Je vous remarquez copiez le QMap avec

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

Je suppose que vous voulez prendre une référence à ce i.e..

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

Si vous avez seulement besoin d'une référence à const puis docs dire qu'il est implicitement partagé il est donc pas une grosse affaire.

Si cela aide votre problème, il doit être quelque chose à voir avec la copie du QMap.

Modifier

Depuis cela n'a pas aidé votre problème, je pense que vous devez vérifier le pointeur appctx qui est passé dans registerPlugins et vérifier si elle pointe vers un objet valide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top