我在向vector插入新值时遇到了一个问题,指针停止正常工作。下面是我的代码:
细胞h:
#pragma once
#include <string>
#include <vector>
class Cell
{
public:
Cell(std::string s) : s(s) {}
std::string s;
void test() {}
std::vector<Cell*> refs;
};
字符串
main.cpp:
#include <iostream>
#include <vector>
#include "Cell.h"
int main(int argc, char* argv[])
{
std::vector<Cell> cells = {Cell("1"), Cell("2"), Cell("3")};
cells[2].refs.push_back(&cells[0]);
std::string val = cells[2].refs[0]->s;
cells.insert(cells.begin() + 1, Cell("4"));
val = cells[3].refs[0]->s; // exception
return 0;
}
型
当我插入单元格(“4”)时,我的指针中断,并给予我一个访问冲突异常。你能告诉我哪里出错了吗?
1条答案
按热度按时间mutmk8jj1#
字符串
如果
insert()
导致向量重新分配其内容,则指向向量中任何值的所有现有指针和迭代器都不再有效。型
比如这个
&cells[0]
。如果insert()
重新分配cells
,这个&cells[0]
指针就不再有效,这就变成了未定义的行为。