log*_*og0 15 c c++ malloc pointers memory-management
我想知道指针是否指向一个用malloc/new分配的内存.我意识到任意地址的答案是"不,你不能",但我认为可以覆盖malloc/free并跟踪分配的内存范围.
您是否知道提供此特定工具的内存管理库?
你知道生产代码吗?
Valgrind很棒,但是仪表太多了(慢)并且Will说我们不想像这样使用Valgrind(使得软碰撞足够好).
Mudflap是一个非常好的解决方案,但是专门用于GCC,遗憾的是,检查不会简单地返回一个布尔值(请参阅下面的答案).
请注意,检查内存写入是否合法是一个安全问题.所以寻找表现是有动力的.
小智 12
证明它可能无法有效完成:
char * p1 = malloc(1);
free( p1 );
char * p2 = malloc(1); // probably allocates same block as first malloc
Run Code Online (Sandbox Code Playgroud)
现在p1和p2都指向堆上的相同内存,但只有p2有效.
如果性能不是您的应用程序的真正问题,您可以自己执行此操作:
定义MyMalloc(...)和MyFree(...),其中,与调用malloc/free一起,更新一个(有序的)对列表{address - malloc的结果,blockSize - 请求的内存的amt }.然后当你需要检查指针p时,你会找到一对满足:address <= p <= address + blockSize.
可以/应该检查其他条件,如果你想实际使用那个指针,这只会告诉你地址是否正在使用.