深入理解c指针_学习笔记_7.0指针安全及错误使用

1:地址空间布局随机化 & 数据执行保护
深入理解c指针_学习笔记_7.0指针安全及错误使用

2:指针的定义
  int * ptr1,ptr2; 错误的定义2个指针
  int *ptr1,*ptr2 ;    正确定义2个指针

使用宏定义辅助:#define PINT int *
                                  PINT ptr1,ptr2;
这样也有问题,宏定义只是起到一个书写替代作用,在编译过程中,实际和第一次定义一样

使用类型定义:typedef int * PINT
                              PINT ptr1, ptr2;
 这样定义2个整数指针是可以的。定义一个自定义类型PINT为整数指针类型。

3:指针的初始化
  3.1:野指针 指针没有初始化,指针指向的内容不可知。

  3.2:一般初始化时将指针指向NULL,在赋值后,再检测其是否为NULL,来判断是否赋值正确。
  
  3.3:错误的解引使用
      int* pi;
      *pi=& num;    ///看似正确,其实指针pi未初始化,就给其赋值 所指向的地址,会导致错误

4:迷途指针
  指针被释放后,还来调用指针。

5:将数组传递给函数时,一定要传递数组的长度,这样会帮助函数避免越过数组边界

6:内存释放:没有释放,重复释放。

大部分简单的做法是:在释放指针内存空间后,将其赋值NULL,大部分释放函数会忽略NULL空指针。