c++ - 未处理的异常访问冲突读取位置/使用结构 vector

标签 c++ exception vector

在我搜索并意识到问题原因是使用 vector 后,我遇到了“未处理的异常访问冲突读取位置”,但我仍然没有解决它。

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

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

};

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


};

在.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);
         }

   }


      ....

//方法fill被多次调用(调用次数非常多..)

  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];
            }
         }

     }

最佳答案

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

如果 d 碰巧不包含任何元素,则您正在尝试访问数组索引 -1,这将引发该异常。

关于c++ - 未处理的异常访问冲突读取位置/使用结构 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20189156/

相关文章:

c++ - 在声明时定义vector of vector of vector的大小

java - 为什么我会收到 ArrayIndexOutOfBounds 异常?

c# - 为什么 XmlSerializer 要求从 IEnumerable 继承的类型具有 Add(System.Object) 的实现?

c++ - 无法公开自定义 ctypedef 类的 cython vector

c++ - 为什么我不能将元素插入到数组中的列表中?

c++ - xvalues 不是 glvalues 和 rvalues 吗?

c++ - NDK : has not been declared

java - 应用程序 C++/Java 依赖

java - 它们是异常而不是 Java 中的编译错误。为什么?

java - 如何在遍历 vector 时更新 vector 的元素数组及其值