cppcheck 是怎么检查变量越界的
答案:1 悬赏:10 手机版
解决时间 2021-11-08 04:52
- 提问者网友:献世佛
- 2021-11-07 05:23
cppcheck 是怎么检查变量越界的
最佳答案
- 五星知识达人网友:迟山
- 2021-11-07 06:53
Class Base 是测试代码,检测内存越界的代码是下面这段代码
#define CHECKNU 6893 \\除0外任意值;
#define PRECHECK_FIELD(i) int __precheck##i;
#define POSCHECK_FIELD(i) int __poscheck##i;
#define IN1T_CHECK(o,i){\
(o)->__precheck##i=CHECKNU;\
(o)->__poscheck##i=CHECKNU;\
}
#define CHECK(o,i){\
if((o)->__precheck##i!=CHECKNU ||(o)->__poscheck##i!=CHECKNU){\
printf("%s:%d,memory access out of range with checknu
pre %d,pos %d”,__FILE__,__LINE__,(o)->__precheck##i,(o)->__poscheck##i);\
}\
)
说一下他的思路,在每次申明内存块之前后各申明一个标志变量,并赋特定值,这样理论上在内存块里他们是连续的。看下面的语句
PRECHECK_FIELD(0);
char mem[1024];
POSCHECK_FIELD(0);
在每次使用自己定义的内存块mem前后,都检查一下,看之前定义的标志变量有没有被更改,如果有,则内存被越界操作了。
#define CHECKNU 6893 \\除0外任意值;
#define PRECHECK_FIELD(i) int __precheck##i;
#define POSCHECK_FIELD(i) int __poscheck##i;
#define IN1T_CHECK(o,i){\
(o)->__precheck##i=CHECKNU;\
(o)->__poscheck##i=CHECKNU;\
}
#define CHECK(o,i){\
if((o)->__precheck##i!=CHECKNU ||(o)->__poscheck##i!=CHECKNU){\
printf("%s:%d,memory access out of range with checknu
pre %d,pos %d”,__FILE__,__LINE__,(o)->__precheck##i,(o)->__poscheck##i);\
}\
)
说一下他的思路,在每次申明内存块之前后各申明一个标志变量,并赋特定值,这样理论上在内存块里他们是连续的。看下面的语句
PRECHECK_FIELD(0);
char mem[1024];
POSCHECK_FIELD(0);
在每次使用自己定义的内存块mem前后,都检查一下,看之前定义的标志变量有没有被更改,如果有,则内存被越界操作了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯