前一段时间学习了《代码大全》的“不常见的数据类型”,对此作一个小结,作为对知识点的回顾。不期望自己能记住多少,但希望通过梳理能够在用到的时候有点记忆,在写代码的时候有点印象足矣。到时可以翻开Blog,再细细学习。
指针的使用在我们编程过程中是最容易出现错误的领域之一,尤其是现在经常出现的安全问题,特别是缓冲区溢出,估计占50%的漏洞在这里出现。
指针的理解需要理解两个内容:内存中的某处位置和如何解释该位置中的内容。根据你指针的类型不同,指针所解释的数据类型也不一样。所以一切都取决于指向该内存的指针的基类型。
“内存破坏”,即当你通过一个坏了的指针变量赋值时,会把数据写入本不该写值的内存区域。
如何正确的使用指针,书中主要归纳了如下几点:
1.把指针操作限制在子程序或者类里面,这样这些代码就能相对独立于数据的实现细节,增大了其他程序内重用这些代码的 可能性;
2.同时声明和定义指针;
3.把与指针分配相同的作用域中删除指针;
4.在使用指针之前检查指针;
5.先检查指针所引用的变量再使用它;
6.用狗牌字段来检测损毁的内存;
7.增加明显的冗余;
8.用额外的指针变量来提高代码清晰度;
9.简化复杂的指针表达式;
10.画一个图,便于理解;
11.按照正确的顺序删除链表中的指针;
12.分配一篇保留的内存后备区域;
13.粉碎垃圾数据;
14.在删除或者释放指针之后把它们设为空值;
15.在删除变量之前检查非法指针;
16.跟踪指针分配情况;
17.编写覆盖子程序,集中实现避免指针问题的策略;
18.采用非指针的技术。
书上的条条框框真多,先大概的读一遍,有个印象,对于以后的使用,不懂得拿起这本将近1000页的经典再来回味一遍!
指针的使用在我们编程过程中是最容易出现错误的领域之一,尤其是现在经常出现的安全问题,特别是缓冲区溢出,估计占50%的漏洞在这里出现。
指针的理解需要理解两个内容:内存中的某处位置和如何解释该位置中的内容。根据你指针的类型不同,指针所解释的数据类型也不一样。所以一切都取决于指向该内存的指针的基类型。
“内存破坏”,即当你通过一个坏了的指针变量赋值时,会把数据写入本不该写值的内存区域。
如何正确的使用指针,书中主要归纳了如下几点:
1.把指针操作限制在子程序或者类里面,这样这些代码就能相对独立于数据的实现细节,增大了其他程序内重用这些代码的 可能性;
2.同时声明和定义指针;
3.把与指针分配相同的作用域中删除指针;
4.在使用指针之前检查指针;
5.先检查指针所引用的变量再使用它;
6.用狗牌字段来检测损毁的内存;
7.增加明显的冗余;
8.用额外的指针变量来提高代码清晰度;
9.简化复杂的指针表达式;
10.画一个图,便于理解;
11.按照正确的顺序删除链表中的指针;
12.分配一篇保留的内存后备区域;
13.粉碎垃圾数据;
14.在删除或者释放指针之后把它们设为空值;
15.在删除变量之前检查非法指针;
16.跟踪指针分配情况;
17.编写覆盖子程序,集中实现避免指针问题的策略;
18.采用非指针的技术。
书上的条条框框真多,先大概的读一遍,有个印象,对于以后的使用,不懂得拿起这本将近1000页的经典再来回味一遍!