一個有意思的bug

最近在做圖中路徑查找的算法。
前一個版本中,算法需要動態的將一些邊標記爲不可信任。於是我給邊的定義添加了一個字段。如下

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沒有提示呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章