2011-11-29 98 views
-1

我有我的調整二維向量的問題。二維矢量調整運行時錯誤

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

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

它按預期工作時i0,但崩潰時i1

你知道爲什麼嗎?

+1

護理添加語言標記? –

+1

另外:關心顯示節點的定義?併發布錯誤消息? –

+0

std :: vector > * nodes; – mikbal

回答

2

您已將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 
+0

這樣啓動它: nodes = new std :: vector >; (*節點)[i]不編譯 – mikbal

+0

錯誤是;我寫的一個類沒有默認的構造函數。使用節點[我]只是掩蓋它。用(* node)[i]取代它可以讓我跟蹤它。謝謝 – mikbal

0

你似乎有一個指針向量。那麼,不要。

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

更好的是,使用Boost.MultiArray

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

爲什麼指針會導致錯誤?我真的需要在構造函數中創建向量的指針。 是多陣列比std :: vector更快嗎? – mikbal

+0

@mikbal:你爲什麼需要指針?速度並不重要,你可以在你需要進行配置時進行優化。 –

+0

節點是pathfinder類的成員。它被其他類調用了很多。也稍後通過使用值sizex和sizey(由levelloader類提供)進行初始化。 sizex和sizey只有在構造隨機等級時纔是已知的。 – mikbal