前言
说起C语言中令人头疼的特性,相信大多数人都首先会提指针。
指针非常强大,但也非常不容易驾驭。不知道有多少人因为指针想大声对C语言高歌一曲”爱恨就在一瞬间“。
指针之所以强大,是因为它自由,可以让程序员充分发挥创意,去使用机器的全部能力。
也正是因为自由,所以它放大了人不够严谨的弱点,让人特别容易犯错。
这个系列的文章试图对指针方面常犯的错误做个梳理总结,帮助大家驯服这个C语言的野马。
指针问题本质上可以分为两类,一类是读不属于自己的内存,一类是写不属于自己的内存。
写不属于自己的内存会导致写坏其它流程的数据,引起其它无辜流程的异常。这就是程序员们谈虎色变的”踩内存“,因为这种问题通过分析出错位置处的代码很难看出出错点,所以极难排查。
至于为什么会读写不属于自己的内存,根据问题起因,大体可以分为以下两大类情况:
分类 | 错误情形 | 说明 |
---|---|---|
内容错误 | 1.未初始化 2.空指针 3.指针失效 | 指针或指针指向的数据错误 |
过程错误 | 1.指针偏移计算问题 2.指针访问边界问题 3.指针类型问题 4.结构体对齐问题 5.多引用访问 | 指针的访问过程发生错误,访问到不该访问的内容 |
后续的文章, 我将对上面列举的常见问题进行一一分析,看看有哪些好方法可以解决问题。