最近在做圖中路徑查找的算法。
前一個版本中,算法需要動態的將一些邊標記爲不可信任。於是我給邊的定義添加了一個字段。如下
int edges[MAX_EDGE_NUM][4]; //[邊序號] 0:權重 1:起點 2:終點 3:是否可信賴
到了下一個版本的算法中,不在需要這個不可信賴字段了,於是我從邊的數據結構中刪掉了這個字段。
int edges[MAX_EDGE_NUM][3]; //[邊序號] 0:權重 1:起點 2:終點
然後寫好了一個及其複雜的算法,但不能工作。然後就debug。
debug追了半天,發現有一個全局變量demand_vertex_num
的值初始化錯誤。然後就發現了靈異事件。每次剛開始初始化時,還沒有初始化demand_vertex_num
時,它就莫名其妙的被賦值爲1.
繼續追蹤,發現,當初始化進行到edges
的最後一條邊時,這時demand_vertex_num
就被置爲1.
我興奮了,以爲自己找到了VS的一個bug。
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
然後定睛一看,初始化倒數第二條邊時,最後一條邊的最後一個字段突然有了值。
原來edges[len-2][3]
直接跑到了edges[len-1][0]
的位置。
所以,初始化edges[len][3]
時,全局變量區訪問越界了,而下一個變量剛好是demand_vertex_num
,所以它被莫名其妙的賦了初值。
但是爲何,二維數組訪問越界,VS沒有提示呢?