C语言安全编码之数组索引位的合法范围
C语言中的数组索引必须保证位于合法的范围内!
示例代码如下:
enum{TABLESIZE=100}; int*table=NULL; intinsert_in_table(intpos,intvalue){ if(!table){ table=(int*)malloc(sizeof(int)*TABLESIZE); } if(pos>=TABLESIZE){ return-1; } table[pos]=value; return0; }
其中:pos为int类型,可能为负数,这会导致在数组所引用的内存边界之外进行写入
解决方案如下:
enum{TABLESIZE=100}; int*table=NULL; intinsert_in_table(size_tpos,intvalue){ if(!table){ table=(int*)malloc(sizeof(int)*TABLESIZE); } if(pos>=TABLESIZE){ return-1; } table[pos]=value; return0; }