1

我有两个 MyObj 结构向量。MyObj 定义如下:

struct MyObj
{
   float x, y;
   unsigned int data[8];
   unsigned int tmp[1];

   MyObj(const MyObj &m) 
   {
      x = m.x; y = m.y; 
      tmp[0] = 0;
      for (int i = 0; i < 8; ++i)
      {
         data[i] = m.data[i];
      }
   }
};

然后我有两个向量......

vector<MyObj> v1; 
vector<MyObj> v2;
// both get data eventually.

v1.insert(v1.end(), v2.begin(), v2.end());

v2 在我的实验中有 3535004 个元素。v1 的大小相似。我还尝试构建一个新向量,并仅使用 .push_back 从两个向量构建它。

本质上,当我尝试合并这两个向量时,我只是从 Visual Studio 收到一个错误,说“调试错误!R6010,abort() 已被调用”。很没用...

所以我的问题是:什么可能导致此错误,我该如何解决?谢谢

4

1 回答 1

3

vtext.cpp:

#include <vector>
#include <iostream>
using namespace std;

struct MyObj
{
   float x, y;
   unsigned int data[8];
   unsigned int tmp[1];

   MyObj() {}
   MyObj(const MyObj &m) 
   {
      x = m.x; y = m.y; 
      tmp[0] = 0;
      for (int i = 0; i < 8; ++i)
      {
         data[i] = m.data[i];
      }
   }
};

int main(void)
{
    vector<MyObj> v1(3535004); 
    vector<MyObj> v2(3535004);
    // both get data eventually.

    v1.reserve(3535004 + 3535004);

    cout << v1.capacity() << endl;

    v1.insert(v1.end(), v2.begin(), v2.end());

    cout << "It worked" << endl;
}

$ g++ vtest.cpp -o vtest

$ ./vtest

7070008

有效

它在有和没有reserve声明的情况下都有效。要么您正在使用非常低的内存系统(我的系统有 4GB),要么错误出在您没有向我们展示的内容中。

编辑:遵循@MooingDuck 在他的评论中暗示的建议,如果您仍然有问题,请将insert上面的语句替换为

try 
{
        v1.insert(v1.end(), v2.begin(), v2.end());
}
catch (exception& e)
{
   cout << e.what() << endl;
}

并从那里拿走。还要#include <exception>在顶部添加。

于 2012-10-23T23:21:05.830 回答