最近在研究乙個演算法,為了驗證其效率就隨手編寫了乙個**。本以為沒什麼問題,結果一執行程式就卡住導致執行出錯。
額。。。寫個程式有bug很正常的事情嘛,然而,就是這個bug花了我一天的時間找錯誤。更令我沮喪的是,錯誤的源頭竟然是。。。(買個關子,有興趣的讀者可以看看下面的偽**找找錯誤,錯誤分析見最後)
我將c++**主要部分列出,讀者可以猜猜(錯誤新人也可能找到哦,主要是我太蠢了,哈哈 )
// 乙個點的資料結構
class
point
queue> q;
// 乙個用於儲存點的佇列
ds ds;
// 乙個用於組織點集的資料結構
// 檢查該點的值是否滿足要求
bool
valuecheck
(point *p)
// 檢查該點是否滿足插入ds的要求
bool
insertcheck
(point *p)
// 將乙個點插入到ds中
bool
insert
(point *p)
else
return
false;}
void
main()
else}.
..}
如果執行程式,乙個非常有意思的現象是ds中的一些點不是原先q中儲存的點,同時在我編寫的**中,經常會導致**執行錯誤,但有時候卻可以正常執行。
錯誤分析:
其實,很顯然這是乙個關於記憶體不正當使用的乙個問題。錯誤的原因就在insert ( p )這句話這,如果乙個點滿足插入條件並插入ds中,但卻不滿足值檢查(valuecheck)條件,就會導致else語句塊執行,也就是刪除該點所在的記憶體空間,從而在最後查點的時候發現有異常的點。
乙個很簡單的辦法是修改if(insert( p ) && valuecheck( p ))為if(valuecheck( p ) && insert( p )),即利用&&的短路機制,只有在滿足值檢查後,再進行插入檢查和插入操作。
這篇文章主要是想提醒新人們,在new和delete時一定要仔細檢查啊,千萬不要和作者一樣犯這麼低階的錯誤。。。。。(= m =)
mysql當天時間和前一天時間
獲取當前的年月日,我使用的是 curdate 下一天或者前一天 curdate 1curdate 1 這是錯誤的寫法 mysql官網也是不承認時間直接相加減的,雖然會將當前時間轉換為20160802,這時候就是比較這一串字元,mysql官網是不承認用這種方式比較時間大小的正確的sql語句 selec...
我的一天 時間都去哪了?
隨著年齡的增大,越來越覺得時間流失的忒快了,都看不到時間走過的軌跡。閒暇之時,回想一下近期的生活和工作,有種虛度光陰 低效利用時間的罪惡感 我是誰?我是乙個即將進入所謂程式設計師最干戈的年齡 35歲 的程式設計師,外加2個孩子的奶爸。一方面面臨著工作上的各種壓力,另乙個方面面臨著家庭生活水平提高 孩...
PHP 前一天 後一天時間
date default timezone set prc 預設時區 echo 今天 date y m d time echo 今天 date y m d strtotime 18 june 2008 echo 昨天 date y m d strtotime 1 day echo 明天 date y...