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
投稿

猜你喜欢

  • Android 中糟糕的AsyncTask

    2022-07-09 00:43:35
  • mybatis QueryWrapper的条件构造之apply、last、select解析

    2022-02-12 17:32:51
  • SpringBoot和Vue.js实现的前后端分离的用户权限管理系统

    2023-09-03 14:37:33
  • 基于swing实现窗体拖拽和拉伸

    2023-11-12 22:32:40
  • C#使用foreach遍历哈希表(hashtable)的方法

    2022-10-07 20:00:44
  • Javaweb基础入门requse原理与使用

    2021-10-07 20:55:29
  • Java实现SMS短信通发送手机验证码案例讲解

    2022-05-14 22:37:57
  • Java concurrency之非公平锁_动力节点Java学院整理

    2022-07-31 22:04:37
  • C#从画刷创建画笔的方法

    2022-11-22 15:49:17
  • Java实现定时任务的方法详解

    2022-12-30 04:14:00
  • java web学习_浅谈request对象中get和post的差异

    2022-10-28 00:25:20
  • idea启动springmvc项目时报找不到类的解决方法

    2023-11-09 16:51:04
  • C#事件标准命名规则及说明(包括用作事件类型的委托命名)

    2022-02-27 06:57:43
  • Java Socket编程详解及示例代码

    2022-06-29 07:05:27
  • Java多线程死锁与资源限制操作

    2023-08-31 05:54:30
  • 基于Java实现的Dijkstra算法示例

    2021-09-17 02:51:13
  • Android TextWatcher监控EditText中的输入内容并限制其个数

    2022-08-18 13:27:41
  • 浅析Java中Apache BeanUtils和Spring BeanUtils的用法

    2021-07-10 21:29:15
  • java 实现KMP算法

    2022-09-14 15:44:40
  • IntelliJ IDEA最佳配置(推荐)

    2023-11-17 01:55:44
  • asp之家 软件编程 m.aspxhome.com