C语言安全编码之数组索引位的合法范围
作者:shichen2014 时间:2021-12-08 06:09:51
C语言中的数组索引必须保证位于合法的范围内!
示例代码如下:
enum {TABLESIZE = 100};
int *table = NULL;
int insert_in_table(int pos, int value) {
if(!table) {
table = (int *)malloc(sizeof(int) *TABLESIZE);
}
if(pos >= TABLESIZE) {
return -1;
}
table[pos] = value;
return 0;
}
其中:pos为int类型,可能为负数,这会导致在数组所引用的内存边界之外进行写入
解决方案如下:
enum {TABLESIZE = 100};
int *table = NULL;
int insert_in_table(size_t pos, int value) {
if(!table) {
table = (int *)malloc(sizeof(int) *TABLESIZE);
}
if(pos >= TABLESIZE) {
return -1;
}
table[pos] = value;
return 0;
}
标签:C语言,安全编码,数组,合法,范围
0
投稿
猜你喜欢
java io文件操作从文件读取数据的六种方法
2023-05-17 02:54:40
c# 读取XML文件的示例
2023-11-04 00:51:17
Android实现图文垂直跑马灯效果
2023-09-05 14:19:36
Mybatis中的@Select、foreach用法
2023-06-05 00:07:20
异常try catch的常见四类方式(案例代码)
2023-11-10 23:18:00
浅谈C#网络编程详解篇
2022-10-23 04:30:28
Java实现按权重随机数
2023-11-28 23:15:32
Java的Spring框架下的AOP编程模式示例
2023-11-02 00:52:25
MyEclipse设置Console输出到文件的实现方法
2022-01-14 10:37:03
Java 基础之事务详细介绍
2021-12-16 19:35:36
C#正则表达式转义字符介绍
2022-11-03 01:10:09
深入理解Android 5.0中的Toolbar
2022-08-28 02:26:39
spring配置不扫描service层的原因解答
2022-03-24 16:35:02
Spring启动时实现初始化有哪些方式?
2023-09-20 18:25:57
Android开发之Android.mk模板的实例详解
2022-02-20 09:11:44
SpringBoot结合SpringSecurity实现图形验证码功能
2023-02-25 16:04:52
举例讲解Java中Piped管道输入输出流的线程通信控制
2021-06-25 14:19:58
工作中禁止使用Executors快捷创建线程池原理详解
2021-11-24 20:55:48
Springboot实现Shiro整合JWT的示例代码
2022-01-30 02:58:32
C#实现收发邮件功能
2021-09-20 19:40:46