程序员经常犯的一个错误:数组越界

数组越界错误,主要表现在这几个方面:
1,分配数组没有以\0结尾,计算数组大小时,导致用函数strlen去取大小时不是预料中的大小;
2,定义数组时,没有memset,而直接采用数组最后一位下标赋值为0的方法,虽然比memset高效,但是往往下标越界,导致错误;
3,分配数组大小时,没有考虑特殊情况,往往想当然;或者开始想好了,但是决策变化,但是数组的大小分配仍然没有变化,导致数组越界错误;
4,另外,关于越界问题,类型的分配不对,unsigned short 最长只能65535,如果超过此长度,也会导致越界问题;

介于此:
1,每次分配数组大小时,估计的数组大小要比原来大小大1个字节,用于\0截断字串;
2,在性能要求不太重要时,memset往往比下标赋值安全;
3,在数组分配大小时,最好采用定义变量值的方式或者动态分配大小,定义变量值能够是决策发生变化时,很容易修改代码,动态分配容易除了能够节省内存外,还能找出隐藏的越界问题;
4,对于类型的越界问题,需要多用valgrind等内存检查工具来检测,另外,注释你所写的代码来检查代码发生错误的地方也不失一种检查代码的好办法。

Monthly Archives

Pages

Powered by Movable Type 7.7.2

About this Entry

This page contains a single entry by Cnangel published on October 24, 2008 5:03 PM.

如何用C程序实现将GB2312的6763个汉字按输出到一个文本文件 was the previous entry in this blog.

介绍几款非常好用的vim插件 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.