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