我在调整二维向量时遇到问题。
std::vector<std::vector<NavigationNode>> *nodes;
nodes->resize(sizex);
for(unsigned int i=0; i<sizex ;i++)
nodes[i].resize(sizey);
当i
为0
时,它会按预期运行,但i
为1
时会崩溃。
你知道为什么吗?
答案 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]);