Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::长度_错误内存位置0x00000A31EBFF050(带向量)_C++ - Fatal编程技术网

C++ std::长度_错误内存位置0x00000A31EBFF050(带向量)

C++ std::长度_错误内存位置0x00000A31EBFF050(带向量),c++,C++,我正在创建一个应用程序,却被向量“重新分配”所困扰。我试图做的是传递tuple,其中第三个元素是指向向量的指针。这样做:Vector*pointer=&arr[length]。当我试着打印地址时,它的工作方式和预期的一样。尝试此操作时出现问题: (*get(*it))。调整大小(++get(*it)) 正在尝试重新分配,如(*指针).resize()工作 我想做的是tuple(类似于关系数据库): tuple是唯一id、该id的条目数、指向该行第一个元素地址的指针 所以基本上,我将有一个元组,其

我正在创建一个应用程序,却被向量“重新分配”所困扰。我试图做的是传递tuple
,其中第三个元素是指向向量的指针。这样做:
Vector*pointer=&arr[length]。当我试着打印地址时,它的工作方式和预期的一样。尝试此操作时出现问题:

(*get(*it))。调整大小(++get(*it))

正在尝试重新分配,如
(*指针).resize()工作

我想做的是tuple(类似于关系数据库):

tuple
是唯一id、该id的条目数、指向该行第一个元素地址的指针

所以基本上,我将有一个元组,其中包含关于唯一ID的基本信息、每个IP的行数以及指向该特定行的指针

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

下面是我当前使用的代码:(注意变量
a
的类型是
Log

typedef向量查找\u列表;
查找列表查找;
向量arr;
向量*指针;
整数长度=0;
字符串ip;
对于(int i=0;i
我得到的错误基本上是要么试图访问超出边界的内存,要么是长度错误(“向量太长”)


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

pointer=&arr[length];…查找。向后推(元组(IP,1,指针))
--您不应该像代码试图做的那样存储指向向量项的指针。如果调整向量的大小,这些指针值可能会失效。@PaulMcKenzie感谢您的快速回答。但是如果这些信息不应该位于向量中,我可以将它们存储在哪里?存储在
向量中,但不要使用指针或是v非常小心如何使用指向它的指针。非常有帮助的阅读。对于
向量
而言,指针和迭代器几乎是一样的(但并非所有容器都是一样的)。@Aljosa--您可以尝试
std::list
,如果添加或删除项,指针不会失效(假设您没有删除指向的当前项)。
pointer=&arr[length];…查找。向后推(元组(ip,1,指针))
--您不应该像代码试图做的那样存储指向向量项的指针。如果调整向量的大小,这些指针值可能会失效。@PaulMcKenzie感谢您的快速回答。但是如果这些信息不应该位于向量中,我可以将它们存储在哪里?存储在
向量中,但不要使用指针或是v非常小心如何使用指向它的指针。非常有帮助的阅读。对于
向量
而言,指针和迭代器几乎是一样的(但并非所有容器都是一样的)。@Aljosa--您可以尝试
std::list
,如果添加或删除项,指针不会失效(假设您没有删除指向的当前项)。
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];
}