使用gcc / g ++ / gdb / valgrind进行debugging时的魔术数字?

微软的Visual C ++如果没有被程序员自己初始化,就会用“幻数”填充内存。 这有助于debugging未初始化的内存。 ( 在Visual Studio C ++中,什么是内存分配表示? , 0xDEADBEEF与NULL )

使用Linux GNU工具(g ++ / gdb)时有没有类似的function?

谢谢!

Solutions Collecting From Web of "使用gcc / g ++ / gdb / valgrind进行debugging时的魔术数字?"

您可以覆盖C ++ operator new以将分配设置为您的首选字节模式:

 void* operator new(size_t size) { void* mem = malloc(size); if (!mem) { throw std::bad_alloc(); } memset(mem, 0xEE, size); return mem; } 

你可以在这里看到完整的GCC实现: https : //github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/libsupc%2B%2B/new_op.cc ,如果你想镜像它更紧密。

这将适用于任何使用默认C ++分配器的东西,但不适用于使用普通旧malloc()东西。 如果你需要直接从malloc()初始化内存,你也可以重写,但是做这个的机制是不同的:你可以使用链接器的--wrap选项来操作符号表,并让你重载malloc() 。 那么你当然不需要重载operator new 。 完整的方法在这里回答说明: https : //stackoverflow.com/a/3662951/4323