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
  • asp之家 软件编程 m.aspxhome.com