1. 编译时加入-fsanitize=address,可以检测程序运行时是否访问了非法内存地址。
比如编译后运行如下代码段:
#include<bits/stdc++.h>
int a[10];
int main(){
a[10]=1;
return 0;
}
终端中将会显示出一大段内容表示你访问了非法内存地址。
在 gdb 中运行时将显示出错的行号,可以在那一堆乱七八糟的东西里面找找。
显然,加入这个命令会降低程序的运行效率。
2. 编译时加入-ftrapv,可以检测程序运行时是否爆了 int 或者爆了 long long。
比如编译后运行如下代码段:
#include<bits/stdc++.h>
int n;
int main(){
n=2147483647;
n++;
return 0;
}
然后就会:已放弃 (核心已转储)。
同样,在 gdb 中调试就可以找到出错的地方了。
3 条评论
juruo-oier · 2018年4月10日 12:43 下午
+1
litble · 2018年4月10日 11:55 上午
Orz 赶紧膜%%%%%
Salamander 太强辣
konnyakuxzy · 2018年4月10日 10:36 上午
Orz 赶紧膜%%%%%
Salamander 巨犇光临本站真是太荣幸了
千古神犇 Salamander,扑通扑通跪下来 Orz
话说已经给您提升用户权限了,您发布的文章不需要审核就能发布了 QvQ