2D矢量调整运行时错误

2D Vector resize runtime error

本文关键字:运行时错误 调整 2D      更新时间:2023-10-16

我在调整二维向量的大小时遇到了问题。

std::vector<std::vector<NavigationNode>> *nodes;
nodes->resize(sizex);
for(unsigned int i=0; i<sizex ;i++)
    nodes[i].resize(sizey);

i0时正常工作,但当i1时崩溃。

你知道为什么吗?

您已经将nodes的类型定义为指向向量的向量的指针。假设这个指针已经被初始化为正确分配的内存,nodes[i]没有在外部向量上调用操作符[],它访问nodes指向的内存,就好像它是一个连续的数组一样。它相当于*(nodes+i)

在这种情况下,更正确的语法是(*nodes)[i]

std::vector<std::vector<NavigationNode>> *nodes;
nodes->resize(sizex);
for(unsigned int i=0; i<sizex ;i++)
    (*nodes)[i].resize(sizey); //line changed

您似乎有一个指向vector的指针。嗯,不。

std::vector<std::vector<NavigationNode>> nodes(
    sizex, std::vector<NavigationNode>(sizey)
);

使用Boost.MultiArray就更好了。

boost::multi_array<NavigationNode, 2> nodes(boost::extents[sizex][sizey]);