C调试器是否将所有进程内存初始化为0?

Do C debuggers initialise all process memory to 0?

我最近遇到了间歇性的未初始化指针问题,它导致了段错误。我尝试使用 gdb 和 vscode 的内置调试器 (cppdbg) 对其进行调试,但我无法复制它,该问题仅在我 运行 可执行文件正常时出现。如果指针不为空,相关代码会释放一个指针,并且 1/10 运行它恰好是非空的,因为它从未被初始化。我重新运行调试器将近一百次,所以我有点好奇为什么在调试时从未发生过段错误。

是否gdb/etc在启动进程之前将进程内存初始化为0?

Does gdb/etc initialise process memory to 0 before starting the process?

没有

根据确切的细节(堆栈上是否有未初始化的指针?),可能是 意外 bug 没有在调试器下显示。

调试器确实会稍微改变进程环境,因此一些错误确实或多或少很容易在它们下面显示出来。

P.S。有一些强大的工具,例如 Valgrind 和 Memory Sanitizer,可以很容易地找到此类错误。