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

看板C_and_CPP (C/C++)作者 (萌熊)時間9年前 (2017/04/16 02:52), 9年前編輯推噓5(5014)
留言19則, 10人參與, 最新討論串1/1
※ [本文轉錄自 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過程也沒有警告。 能不能在我存取到不該存取的位置之後能有警示? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.91.189 ※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1492277454.A.12C.html ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: moebear (140.113.91.189), 04/16/2017 02:52:39 ※ 編輯: moebear (140.113.91.189), 04/16/2017 02:57:53

04/16 03:00, , 1F
en.cppreference.com/w/cpp/container/array/at
04/16 03:00, 1F

04/16 03:03, , 2F
valgrind ?
04/16 03:03, 2F

04/16 04:38, , 3F
try -fsanitize=address ?
04/16 04:38, 3F

04/16 07:46, , 4F
vs 應該是沒有 -fsanitize 的選項的樣子, 可能要靠外部工具
04/16 07:46, 4F

04/16 08:55, , 5F
VS有的話我也想知道...
04/16 08:55, 5F

04/16 09:26, , 6F
印象中google的gtest和benchmark偶爾可以攔截到這種錯誤
04/16 09:26, 6F

04/16 09:26, , 7F
話說回來說這是你的問題
04/16 09:26, 7F

04/16 09:27, , 8F
C++提供很多工具,寫程式本來就是一直在做取捨
04/16 09:27, 8F

04/16 09:27, , 9F
不做檢查程式碼會少,速度會快
04/16 09:27, 9F

04/16 09:27, , 10F
每次執行檢查如果要做檢查,速度就是慢一倍
04/16 09:27, 10F

04/16 09:27, , 11F
不然你以為為什麼debug mode遠遠比release mode慢
04/16 09:27, 11F

04/16 09:29, , 12F
陣列傳進function還是要給size 連這都不檢查要怪誰
04/16 09:29, 12F

04/16 09:44, , 13F
改用vector 呼叫at?
04/16 09:44, 13F

04/16 10:32, , 14F
這個雙黃線太爛了,開到對面居然不會把我彈回來。
04/16 10:32, 14F

04/16 10:32, , 15F
(設計對白)
04/16 10:32, 15F
謝謝各位大大,at看起來滿符合要求的,之後會盡量改用at取。 我用 -fsanitize=address也得到一些錯誤回饋,謝謝各位。 我了解這是我程式設計的問題,我是希望能在已經確定我產生存取越界的時候, 能比較快地找到問題點,我的想法是,既然教授的系統可以做到這件事情, 沒有理由那些由大公司或是g++等編譯或是其他外掛程式沒有辦法做到 ※ 編輯: moebear (140.113.91.189), 04/16/2017 13:25:24

04/16 13:53, , 16F
at就是每次存取會檢查 你說的大公司系統也是
04/16 13:53, 16F

04/16 13:58, , 17F
通常教授的系統會抓這個都是要防止緩衝區溢位攻擊
04/16 13:58, 17F

04/16 13:58, , 18F
就是怕有學生黑他
04/16 13:58, 18F

04/16 14:21, , 19F
教授的server每天都有人在亂try吧XD 保護當然要做好
04/16 14:21, 19F
文章代碼(AID): #1Oyclu2O (C_and_CPP)
文章代碼(AID): #1Oyclu2O (C_and_CPP)