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

发表评论

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

你是机器人吗? =。= *