如果程序员自己没有初始化内存,Microsoft 的 Visual C++ 就会用“魔数(Magic Number)”填充内存。这有助于调试未初始化的内存。 (In Visual Studio C++, what are the memory allocation representations?,0xDEADBEEF vs. NULL)
使用linux GNU工具(g++/gdb)有类似的功能吗?
谢谢!
最佳答案
您可以重写 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如果您想更仔细地反射(reflect)它。
这适用于使用默认 C++ 分配器的任何内容,但不适用于使用常规旧 malloc()
的内容。如果您需要直接从 malloc()
初始化内存,您也可以覆盖它,但执行此操作的机制不同:您可以使用链接器的 --wrap
选项操作符号表并让您重写malloc()
。那么你当然不需要重载operator new
。完整的方法在此处的答案中进行了说明:https://stackoverflow.com/a/3662951/4323
关于c++ - 使用 gcc/g++/gdb/valgrind 调试时的魔数(Magic Number)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37090156/