大家好,
我有一个如下的代码片段:
class AppCtx {
private:
QMap<QString,IRzPlugin*> pluginsMap;
public :
void addPlugin(IRzPlugin *plugin)
{
pluginsMap.insert(plugin->getPluginUID(),plugin);
}
QMap<QString,IRzPlugin*> & getPlugins()
{
return pluginsMap;
}
}在我的客户端代码中,我以follows.But的身份访问QMap,应用程序在访问“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++)
{
}
}调试信息如下:
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
}有什么建议吗?
提前谢谢你,umanga
发布于 2010-07-02 16:46:56
我注意到您正在使用复制QMap
QMap<QString,IRzPlugin*> plugins=appctx->getPlugins();我假设你想引用它,即
QMap<QString,IRzPlugin*>& plugins=appctx->getPlugins();如果你只需要一个对const的引用,那么docs会说它是隐式共享的,所以这没什么大不了的。
如果这对您的问题有帮助,那么它一定与复制QMap有关。
编辑
由于这对您的问题没有帮助,我认为您需要检查传入registerPlugins的指针appctx,并检查它是否指向有效的对象。
https://stackoverflow.com/questions/3164237
复制相似问题