Reputation: 9158
Greetings all,
I have a code snippet as follows :
class AppCtx {
private:
QMap<QString,IRzPlugin*> pluginsMap;
public :
void addPlugin(IRzPlugin *plugin)
{
pluginsMap.insert(plugin->getPluginUID(),plugin);
}
QMap<QString,IRzPlugin*> & getPlugins()
{
return pluginsMap;
}
}
In my client code I access the QMap as follows.But the application breaks where it access the '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++)
{
}
}
Debug info is given below :
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
}
any tips?
Thanks in advance, umanga
Upvotes: 1
Views: 4010
Reputation: 13421
I notice you are copying the QMap with
QMap<QString,IRzPlugin*> plugins=appctx->getPlugins();
I assume you want to take a reference to it i.e.
QMap<QString,IRzPlugin*>& plugins=appctx->getPlugins();
If you only need a reference-to-const then the docs say that it is implicitly shared so it's not such a big deal.
If this helps your problem then it must be something to do with copying the QMap
.
Edit
Since this didn't help your problem I think you need to check the pointer appctx
that gets passed into registerPlugins
and check if it points to a valid object.
Upvotes: 1