Problem mit QMap Rückkehr als Referenz?
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 ()
zugreifenclass 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
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.