首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为引用返回QMap有问题吗?

作为引用返回QMap有问题吗?
EN

Stack Overflow用户
提问于 2010-07-02 16:36:34
回答 1查看 3.7K关注 0票数 1

大家好,

我有一个如下的代码片段:

代码语言:javascript
复制
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()”时中断。

代码语言:javascript
复制
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++)
   {

   }
 }

调试信息如下:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-02 16:46:56

我注意到您正在使用复制QMap

代码语言:javascript
复制
QMap<QString,IRzPlugin*> plugins=appctx->getPlugins();

我假设你想引用它,即

代码语言:javascript
复制
QMap<QString,IRzPlugin*>& plugins=appctx->getPlugins();

如果你只需要一个对const的引用,那么docs会说它是隐式共享的,所以这没什么大不了的。

如果这对您的问题有帮助,那么它一定与复制QMap有关。

编辑

由于这对您的问题没有帮助,我认为您需要检查传入registerPlugins的指针appctx,并检查它是否指向有效的对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3164237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档