分段错误我无法弄清楚

时间:2011-09-03 20:21:42

标签: c++ error-handling

我有以下构造函数:

    Timing::Timing():
    _numMes(INIT_NUMMES),_msgs(new allMSgs*[NUMBER_OF_MSGS])
    {

        cout<<"build timing OK\n";
    }

allMSgs是一个结构:

   typedef struct AllMSgs
   {
            double msg;
        Agent* dedicatedTo;
   }allMSgs;

并且它的声明是这样完成的:

        allMSgs** _msgs;

但是当我尝试像这样在阵列中找到一个字段时:

     _msgs[loc]->dedicatedTo=agent->getPointsTo();

我遇到了分段错误。

NUMBER_OF_MSGS是1000

loc是0,1,2 ....(少于1000);

请帮助

2 个答案:

答案 0 :(得分:5)

你已经创建了一个指针数组,但是没有将它们设置为指向任何有效的指针。您要么需要将其更改为:

allMSgs* _msgs;

new allMSgs[NUMBER_OF_MSGS]

或者为allMSgs数组中的每个指针调用new。

更好的是,你可以使用std::vector或其他容器std::vector<allMSgs> _msgs;,你可以使用它,就像在大多数情况下它是一个数组一样。你也可以用尺寸来推销它。

答案 1 :(得分:1)

您只分配了数组本身。您还需要分配数组的每个项目。在构造函数中,添加一个分配所有项的for循环。

for (int i = 0; i < NUMBER_OF_MSGS; i++)
  _msgs[i] = new allMSgs();

您也可以将数组定义为allMSgs的数组,而不是allMSgs的指针。

allMSgs* _msgs;