在我的代码中,我在某处有一个未初始化的指针,似乎被释放了。这个项目很大,我找不到价值。问题是:一旦我附加了调试器,内存似乎初始化为零,导致指针NULL
,free
不会造成麻烦。有没有办法在将GDB与0xDEADBEEF
一起使用时初始化内存?
使用 GDB 时,有没有办法初始化内存
,例如 0xDEADBEEF
当然,如果你知道它的地址:(gdb) call memset($addr, 0xCC, $size)
或(gdb) set *(int*)$addr = 0xDEADBEEF
。
问题通常是您不知道未初始化的指针将在内存中的位置。
找到它的一种方法是使用内存清理器。
另一种方法是确定此指针是全局的、在堆栈上还是在堆上,它应该被初始化,并使用 awatch 命令在其上设置访问观察点。
附言你似乎很确信你的问题是"未初始化的自由",但"双重自由"的症状通常是相似的。在做其他任何事情之前,我会尝试使用地址消毒剂。