具有向量的std :: length_error存储器位置0x00000A31EBFF050

时间:2019-04-24 21:06:51

标签: c++

我正在创建一个应用程序,并被矢量“重新分配”所困扰。我想做的是传递元组<string, int, vector<Log> *>,其中第三个元素是指向vector<vector<Log>>的指针。这样做:Vector <Log> *pointer = &arr[length];。当我尝试打印地址时,它可以正常工作。我尝试这样做时出现问题:

(*get<2>(*it)).resize(++get<1>(*it));

尝试像(*pointer).resize();一样重新分配

我要制作的是元组(类似于关系数据库):

tuple<string, int, vector <Log> *>是唯一ID,该ID的条目数,指向该行第一个元素的地址的指针

因此,基本上,我将具有有关唯一ID,每个IP的行数以及指向该特定行的指针的基本信息的元组。

第一次出现IP时,它将被添加到元组中,并且数据首先存储在其中。彼此相同的IP将在元组中进行检查,当发现它的数据需要存储在下一个可用空间中(大小调整为1)。希望它不太复杂。

这是我当前正在使用的代码:(请注意,变量a的类型为Log

typedef vector<tuple<string, int, vector <Log>*>> lookup_list;

lookup_list lookup;
vector<vector<Log>> arr;
vector <Log> *pointer;
int length = 0;
string ip;

for (int i = 0; i < arr_size; i++){
 ip = a[i].ip_address;

auto it = find_if(lookup.begin(), lookup.end(), [ip](const tuple<string, int, vector <Log>*>& e){
     return get<0>(e) == ip;
});

if (it == lookup.end()){
   arr.resize(length + 1);
   arr[length].resize(1);
   pointer = &arr[length];
   arr[length][0] = a[i];
   lookup.push_back(tuple<string, int, vector <Log> *>(ip, 1, pointer));
   length++;
}
else {
   get<1>(*it)++;
   (*get<2>(*it)).resize(get<1>(*it));
   (*get<2>(*it))[(get<1>(*it))-1] = a[i];
}

我遇到的错误基本上是试图访问超出范围的内存或_Xlength_error(“ vector too long”);

应该注意,这是在相同大小的第一个IP上发生的,因此不确定为什么会触发该错误...

0 个答案:

没有答案