2D Vector调整运行时错误

时间:2011-11-29 23:11:45

标签: c++ vector 2d

我在调整二维向量时遇到问题。

std::vector<std::vector<NavigationNode>> *nodes;
nodes->resize(sizex);

for(unsigned int i=0; i<sizex ;i++)
    nodes[i].resize(sizey);

i0时,它会按预期运行,但i1时会崩溃。

你知道为什么吗?

2 个答案:

答案 0 :(得分:2)

您已将nodes的类型定义为指向矢量矢量的指针。假设此指针已初始化为正确分配的内存,nodes[i]不在外部向量上调用operator [],它正在访问内存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

答案 1 :(得分:0)

您似乎有一个指向矢量的指针。好吧,不要。

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

更好的是,使用Boost.MultiArray

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