我想知道一个指针是否指向一 block 用 malloc/new 分配的内存。我意识到任意地址的答案是“不,你不能”,但我确实认为可以覆盖 malloc/free 并跟踪分配的内存范围。
您知道提供此特定工具的内存管理库吗?
你对生产代码了解吗?
Valgrind很棒,但它的工具太多(慢),正如 Will 所说,我们不想像这样使用 Valgrind(使软崩溃就足够了)。
Mudflap是一个非常好的解决方案,但专用于 GCC,可悲的是,检查不会简单地返回 bool 值(请参阅下面的答案)。
请注意,检查内存写入是否合法是 security issue .所以追求表现是有动力的。
最佳答案
证明它可能无法有效地完成:
char * p1 = malloc(1);
free( p1 );
char * p2 = malloc(1); // probably allocates same block as first malloc
现在 p1 和 p2 都指向堆上的同一个内存,但只有 p2 是有效的。
关于c++ - 检查指针是否指向堆上分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3065092/