第五章 安全问题与指针误用

由于C语言的涉及初衷,就是相信程序员,所以C语言被设计的很灵活。但这也就意味着C语言并不是一个安全的语言,很多问题都需要程序员自己来注意。在使用指针时更是如此,由于指针对内存操作的强大灵活性,稍有不慎便会导致内存的误操作,从而影响程序。对C语言的安全操作似乎成为了一个专门的研究方向。

  • CERT 以上是一个很好的了解和获取C语言安全问题解决方案的来源。

本章从某种角度算是之前各章的一个安全问题总结,因此本章主要以TIP的形式给出使用C指针时需要注意的问题。

指针的声明和初始化

  • int *ptr1, ptr2,这里ptr2不是指针
  • 使用类型定义会比宏定义要好,类型定义可以允许编译器进行检验,宏定义不一定会
  • 代码typedef int* PINT; PINT ptr1,ptr2可以更好地声明指针。
  • 指针声明后如果没有初始化,则是野指针。其指向的区域是未知的,这时候读写该指针都是危险的。所以声明指针后应当初始化。处理未初始化的指针有三种方式
    • 最简单的方式是赋值为NULL
    • 使用<assert.h>中的assert函数
    • 使用编译器-Wall选项

指针的使用

  • 使用指针前检测是否为NULL
  • 注意迷途指针的产生
  • 时刻注意内存区域的边界以及数据的大小
  • 注意sizeofstrlen的区别
  • 不要使用结构体指针偏移的方式来访问结构体成员变量

内存的释放

  • 不要重复释放内存

results matching ""

    No results matching ""