调试断言失败!矢量下标超出c++范围

Debug Assertion Failed! Vector subscript out of range c++

本文关键字:c++ 范围 下标 断言 失败 调试      更新时间:2023-10-16

我也尝试过使用v.erase(v.begin()+j),但我仍然得到了"调试断言失败"错误框。该函数假设要擦除重复项。例如:{1,2,6,8,2,8}是矢量的元素。这个函数必须使它成为{1,2,6,8}。

 void removeDup(vector<int>& v)
    {
    vector<int> x;
    int i,j,size;
    size=v.size();
    for(i=0;i<size;i++)
        {
         for(j=1;j<size;j++)
         {
          if(v[i]==v[j])
          {
            while(v.back()!=v[j])
            {
                x.push_back(v.back());
                v.pop_back();
            }
           v.pop_back();
           while(!x.empty())
           {
               v.push_back(x.back());
               x.pop_back();
           }
          }
         }
     }
    }

问题发生在if(v[i]==v[j])内部当我擦除2 while函数和v.popback()程序时,不会出现错误。

您正在计算向量v的大小,并将其用作循环迭代计数限制。不幸的是,每当您在循环中调用pop_back时,都会从v中删除项目-这会减小v的大小,但当您在开始计算大小时,循环仍将尝试访问v中的所有项目

因此,您最终会访问向量限制之外的项目。

当使用向量时,使用迭代器通常更有用。看看这个类似的SO问答,因为它可能会帮助你从矢量中擦除元素