楼主:
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过程也没有警告。
能不能在我存取到不该存取的位置之后能有警示?
en.cppreference.com/w/cpp/container/array/at
作者:
Chikei ( )
2017-04-16 03:03:00valgrind ?
作者: Sylveon (ä»™åç²¾éˆ) 2017-04-16 04:38:00
try -fsanitize=address ?
作者:
LPH66 (-6.2598534e+18f)
2017-04-16 07:46:00vs 应该是没有 -fsanitize 的选项的样子, 可能要靠外部工具
作者:
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?
这个双黄线太烂了,开到对面居然不会把我弹回来。(设计对白)
作者:
Ommm5566 (56天團)
2017-04-16 13:53:00at就是每次存取会检查 你说的大公司系统也是
作者: tuyutd0505 (Huang Jason) 2017-04-16 13:58:00
通常教授的系统会抓这个都是要防止缓冲区溢位攻击就是怕有学生黑他
教授的server每天都有人在乱try吧XD 保护当然要做好