c++ 插入向量时指针中断

pwuypxnk  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(64)

我在向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”)时,我的指针中断,并给予我一个访问冲突异常。你能告诉我哪里出错了吗?

mutmk8jj

mutmk8jj1#

cells.insert(cells.begin() + 1, Cell("4"));

字符串
如果insert()导致向量重新分配其内容,则指向向量中任何值的所有现有指针和迭代器都不再有效。

cells[2].refs.push_back(&cells[0]);


比如这个&cells[0]。如果insert()重新分配cells,这个&cells[0]指针就不再有效,这就变成了未定义的行为。

相关问题