我有两个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()已被调用”。非常无用......
所以我的问题是:可能导致此错误的原因是什么,我该如何解决?谢谢
答案 0 :(得分: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>
。