指针和固定大小缓冲区只能在不安全的上下文中使用_作为初学者,在C语言中你应该绝对避免的两个错误...

在C中,最多有2个常见内存错误:

1.悬空指针:

您释放/使得一块内存无效,但没有将指针设置为NULL以便以后进行验证。

2.缓冲区溢出:

您写入和/或读取的数据超出了缓冲区限制。

有很多策略可以避免这两种内存错误。我将首先解决悬空指针:

586763f3b306ad232203f65dce71890f.png

a是一个悬空指针,它指向有效内存,并且该有效内存已释放。下一步是什么?好吧,您将这个东西设置为NULL以便以后可以对其进行NULL检查,并防止意外读取和写入无效内存。

e7bea2293ff38ec5e0eb47669ed7039f.png

悬空的指针并不是那么难处理,只要使用完它的内存,就再次将其设置为NULL即可。但是,另一个危险是如果您复制了原始指针的地址,并且在释放原始指针时不小心使用了该副本!那么您所想的剧情就会发生转折了!!

0f58bf2c24523b58121e3dda2d17798c.png

像这样就出现了:a不再悬空,而b停止!!!

那么您如何避免这种情况?最好的策略是使用指向原始指针的指针:

b5ed79f66864f2d272a7816f93f433e0.png

像这样就是a不是悬空的, b也不会悬空。

现在,处理缓冲区溢出已经很容易了,使用静态大小的缓冲区,编译器可以通过使用已知大小的缓冲区来帮助防止缓冲区溢出。

557f3ab0fef3cac5d96d5eaa4ed86023.png

不管缓冲区的静态大小是多少,用第一个地址减去缓冲区的上限都可以!一个类似的替代方法是直接使用数组的指针作为迭代器:

8229775ac084f0b208a3c0274d715301.png

请记住,这只能防止在静态大小的缓冲区上发生缓冲区溢出,仍然可能存在在动态大小的缓冲区上发生溢出的问题!

在防止动态大小的缓冲区溢出方面。您必须使用簿记变量来跟踪缓冲区的长度,并确保缓冲区的长度跟踪变量不会损坏:

69fb1c7f001b40fd8c22eeba9c098471.png

了解更多有关C/C++学习内容,免费领取学习资料,请看下方了解更多:

b92bbda7dd6c51c3233ddb389cbbfb61.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值