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

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注