必须让指针指向一个有效的内存地址
1 防止数组越界
2 防止向一块内存中拷贝过多的内容
3 防止使用空指针
4 防止改变 const 修改的指针
5 防止改变指向静态存储区的内容
6 防止两次释放一个指针
一般来说指针越界源于数组下标越界,这点是没办法通过编译报错、或者其他机制避免的,否则也不会出现java、python等一众去掉指针的语言。
当然也可以用boost类库里面的一些智能指针,他们对越界操作有一定的限制。
指针访问越界是一个需要经验和严格按照规范使用的情况。比如你对指针的访问都由一个标准化代理来处理,
这个代理包括了指针所指数据的初始化信息,待访问信息,这样每次访问时先检查是否有效,再访问就不容易
越界,但这会使得编程以及程序运行都要增加额外成本,所以在实践中真正这样采用的并不多。而是通过人工
优化来进行优化。
不过即使这样,在遇见异常(C本身没有很好的异常处理机制)时也容易造成越界。
在对某个指针指向的位置进行赋值等操作之前,先读取一下这个指针指向的地址,看是否为空或者不合法的区域
还有,像使用memcpy memset这类函数之前,最后那个size的参数最好与sizeof的结果先比较一下,防止操作的长度超过数组长度