未处理的异常访问违规读取位置/使用struct的向量

时间:2013-11-25 09:59:05

标签: c++ exception vector

我面对“未处理的异常访问违规读取位置”,在我搜索并意识到问题的原因来自使用向量,但我仍然没有解决它。

在.h我定义了以下内容:

struct inside
{ 
  double y;
  vector <int> values;

};

struct outside
{ 
     int x;
     vector <inside> subInfo;
     vector <double> d;


};

in .cpp:

   vector <outside> mainInfo;

       ....
   // method_inti called one time just ...
   method_inti()
   {
        for(int i=1;i<=4;i++)
         {
            outside obj;
            obj.x = i;
            mainInfo.push_back(obj);
         }

   }


      ....

//多次调用方法填充(非常大量的调用..)

  method_fill()
  {
      ... 

     for(i = 1; i <= 4; i++)
     {
        for (int j=0;j< mainInfo.size();j++) // here surly size = 4
        {
           if(mainInfo[j].x == i)
            {    

                inside obj;
                obj.y = i+1;
                obj.values.push_back(10.0);

                mainInfo[j].d.push_back(5.0);
                mainInfo[j].subInfo.push_back(obj);     

          }

       }
     }
       ...

   } 

   // update n val method also called many times..        
    updateNval_method(int t)
     { 
         double n;

        for (int i=0; i< mainInfo.size();i++) 
        {
           if(mainInfo[i].x == t)
            { 
               n= mainInfo[i].d[(mainInfo[i].d.size())-1];
            }
         }

     }

1 个答案:

答案 0 :(得分:3)

在行n= mainInfo[i].d[(mainInfo[i].d.size())-1];中,您从d.size()中减去1以获取数组索引,但您无法保证d.size()&gt; = 1。

如果d恰好不包含任何元素,那么您尝试访问的数组索引为-1,这将抛出该异常。