c++ - 检查指针是否指向堆上分配的内存

标签 c++ c memory-management pointers malloc

我想知道一个指针是否指向一 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/

相关文章:

memory-management - GetRef 的内存消耗(垃圾收集)随 KB4525236 改变

c++ - 在 C++ 中使用 posix pipe() 和 dup() 来重定向 I/O 问题

c++ - 线程池在一些循环后阻塞主线程

c++ - 很奇怪的GDB中的Segmentation fault分析

c - 什么是 C 中可以展示不同 linux 调度程序(noop、CFS、deadline)优缺点的好程序?

c - C中最快的 boolean 表示

docker - Docker容器内存使用率并未下降

c++ - 在头文件中使用 lambda 会违反 ODR 吗?

c - C 中的 gdb : Get type of variable as string

Windows内存管理: check if a page is in memory