有没有办法测试指针的内存分配是否已被释放?

Ash*_*Ash 8 c unit-testing pointers memory-management

有没有办法告诉指针的内存分配已经解除分配?我刚刚开始使用C语言,我想我终于开始理解C中内存管理的复杂性.

例如:

char* pointer;
pointer = malloc(1024);

/* do stuff */

free(pointer);

/* test memory allocation after this point */
Run Code Online (Sandbox Code Playgroud)

我知道指针仍会存储内存地址,直到我设置pointer = NULL- 但有没有办法测试指针不再引用我可以使用的内存,而不必先将其设置为NULL?

我想这样做的原因是我对我的C程序进行了一系列单元测试,其中一个确保在我调用一个执行清理几个链表的特殊函数后没有孤立指针.看一下调试器,我可以看到我的清理函数正在运行,但是我想要一种测试指针的方法,这样我就可以将它们包装在一个单元测试断言中.

Ebo*_*ike 5

没有标准化的内存管理可以告诉您任何给定的地址是否是当前分配的内存块的一部分.

出于单元测试的目的,您可以创建一个跟踪每个分配的全局映射,因此您可以通过自定义malloc函数进行每个分配,该函数在调试版本中向地图添加条目并再次将其删除free.