Вопрос

Привет всем,

У меня есть фрагмент кода следующим образом:

class AppCtx {

private:
 QMap<QString,IRzPlugin*> pluginsMap;

public :
 void addPlugin(IRzPlugin *plugin)
 {
   pluginsMap.insert(plugin->getPluginUID(),plugin);
 }

 QMap<QString,IRzPlugin*> & getPlugins()
 {
  return pluginsMap;
 }
}

В моем клиентском коде я получаю доступ к QMAP следующим образом. Но приложение разрывается, где он доступа к «плагинам .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


}

какие-нибудь советы?

Спасибо заранее, Уманга

Это было полезно?

Решение

Я замечаю, что вы копируете Qmap с

QMap<QString,IRzPlugin*> plugins=appctx->getPlugins();

Я предполагаю, что вы хотите принять ссылку на него, то есть

QMap<QString,IRzPlugin*>& plugins=appctx->getPlugins();

Если вам нужен только ссылка на Const, то документы Скажите, что это неявно поделилось, так что это не такое большое дело.

Если это поможет вашей проблеме, то это должно быть что-то делать с копированием QMap.

Редактировать

Так как это не помогло вашей проблеме, я думаю, вам нужно проверить указатель appctx это передается в registerPlugins и проверьте, указывает ли он на действительный объект.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top