GDB调试中调用memset置空指针数组失败,问题出在哪?
问题原因及解决办法
你的memset调用其实已经生效了,问题出在GDB的变量缓存机制上——GDB为了调试效率,会缓存变量的初始值,你通过call memset直接修改了内存,但GDB没自动刷新这个缓存,所以用print t输出的还是之前的旧值。
验证方法
直接用GDB的x命令查看内存(x直接读取内存,不依赖缓存):
x/3xg t
执行后你会看到三个指针值已经变成0x0。
解决办法
- 手动刷新GDB缓存:执行
flushregs命令,之后再运行print t就能看到更新后的值。 - 直接通过GDB逐个赋值:
这种方式直接修改GDB维护的变量状态,不会出现缓存不一致的问题。set var t[0] = 0 set var t[1] = 0 set var t[2] = 0
补充说明:memset按字节填充0的操作,对于任何架构的NULL指针(均为全0字节表示)都是有效的,所以你的memset调用本身没有语法或逻辑错误,只是GDB的缓存机制导致了显示异常。
内容的提问来源于stack exchange,提问作者Irbis
相关产品推荐
相关产品推荐

