Problème avec retour QMap comme référence?
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
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.