Fw: [問題] 如何發現存取越界? c/c++(V.S.)

作者: moebear (萌熊)   2017-04-16 02:52:39
※ [本文轉錄自 Programming 看板 #1OybZE4i ]
作者: moebear (萌熊) 看板: Programming
標題: [問題] 如何發現存取越界? c/c++(V.S.)
時間: Sun Apr 16 01:30:51 2017
開發平台:windows 10
目標環境:大概是linux,還是unix,分不太清楚。
開發軟體: visual studio 2015 c++
各位好,最近有門課在用judge system,發現我常常會有存取越界的問題
但是在我的編譯軟體(visual studio 2015)上面會偵測不到這個問題,
我也有用系上的工作站(linux環境),直接用g++編譯後執行的話也沒有顯示存取越界
我想 既然judge可以找到這個問題
那在編譯軟體上面應該也可以......吧?
想問問看有沒有什麼方法可以幫助我找到哪邊有存取越界。
舉例來說:
unsigned long long a[3]={1,2,3};
b=b/a[-1];
今天遇到的大概是這樣的情況,我去追蹤,發現a[-1]是一個很大的正數,
在過程中是看不到他造成的影響,debug過程也沒有警告。
能不能在我存取到不該存取的位置之後能有警示?
作者: Hazukashiine (私は幸せです)   2017-04-16 03:00:00
en.cppreference.com/w/cpp/container/array/at
作者: Chikei ( )   2017-04-16 03:03:00
valgrind ?
作者: Sylveon (仙子精靈)   2017-04-16 04:38:00
try -fsanitize=address ?
作者: LPH66 (-6.2598534e+18f)   2017-04-16 07:46:00
vs 應該是沒有 -fsanitize 的選項的樣子, 可能要靠外部工具
作者: MOONY135 (談無慾)   2017-04-16 08:55:00
VS有的話我也想知道...
作者: Ommm5566 (56天團)   2017-04-16 09:26:00
印象中google的gtest和benchmark偶爾可以攔截到這種錯誤話說回來說這是你的問題C++提供很多工具,寫程式本來就是一直在做取捨不做檢查程式碼會少,速度會快每次執行檢查如果要做檢查,速度就是慢一倍不然你以為為什麼debug mode遠遠比release mode慢陣列傳進function還是要給size 連這都不檢查要怪誰
作者: kwpn (ITSST)   2017-04-16 09:44:00
改用vector 呼叫at?
作者: MOONRAKER (㊣牛鶴鰻毛人)   2017-04-16 10:32:00
這個雙黃線太爛了,開到對面居然不會把我彈回來。(設計對白)
作者: Ommm5566 (56天團)   2017-04-16 13:53:00
at就是每次存取會檢查 你說的大公司系統也是
作者: tuyutd0505 (Huang Jason)   2017-04-16 13:58:00
通常教授的系統會抓這個都是要防止緩衝區溢位攻擊就是怕有學生黑他
作者: er230059 (CQH)   2017-04-16 14:21:00
教授的server每天都有人在亂try吧XD 保護當然要做好

Links booklink

Contact Us: admin [ a t ] ucptt.com