在C中,最多有2个常见内存错误:
1.悬空指针:
您释放/使得一块内存无效,但没有将指针设置为NULL以便以后进行验证。
2.缓冲区溢出:
您写入和/或读取的数据超出了缓冲区限制。
有很多策略可以避免这两种内存错误。我将首先解决悬空指针:
a是一个悬空指针,它指向有效内存,并且该有效内存已释放。下一步是什么?好吧,您将这个东西设置为NULL以便以后可以对其进行NULL检查,并防止意外读取和写入无效内存。
悬空的指针并不是那么难处理,只要使用完它的内存,就再次将其设置为NULL即可。但是,另一个危险是如果您复制了原始指针的地址,并且在释放原始指针时不小心使用了该副本!那么您所想的剧情就会发生转折了!!
像这样就出现了:a不再悬空,而b停止!!!
那么您如何避免这种情况?最好的策略是使用指向原始指针的指针:
像这样就是a不是悬空的, b也不会悬空。
现在,处理缓冲区溢出已经很容易了,使用静态大小的缓冲区,编译器可以通过使用已知大小的缓冲区来帮助防止缓冲区溢出。
不管缓冲区的静态大小是多少,用第一个地址减去缓冲区的上限都可以!一个类似的替代方法是直接使用数组的指针作为迭代器:
请记住,这只能防止在静态大小的缓冲区上发生缓冲区溢出,仍然可能存在在动态大小的缓冲区上发生溢出的问题!
在防止动态大小的缓冲区溢出方面。您必须使用簿记变量来跟踪缓冲区的长度,并确保缓冲区的长度跟踪变量不会损坏:
了解更多有关C/C++学习内容,免费领取学习资料,请看下方了解更多: