使用realloc强制重定位

Got*_*tox 1 c unit-testing realloc

我目前正在C中编写一个面向数据的大量库.过去几个小时我一直在寻找一个由于内存重定位引起的悬空指针引起的段错误,并在库内部的某处重新放置.因为这个bug只是由于库中另一个部分的内存泄漏而发生,所以我想知道是否有办法让这类错误更具可重复性.

我有这个想法,也许有一种方法可以强制realloc在每次调用时重新分配已分配的内存.我希望在进行单元测试时尽早捕获这些错误.

是否有这样一个LD_PRELOAD库(或类似的)以一种方式挂钩malloc/realloc/...调用它会因为悬空指针而早期崩溃?

该库旨在跨平台,但我想内存错误是C中为数不多的便携式内容之一.

Bas*_*tch 6

您可以使用valgrind(至少在Linux上)来(有时)检测悬空指针和内存泄漏.您最好使用调试信息进行编译(实际上,使用GCC的gcc -Wall -Wextra -g所有警告和调试信息).

您也可以使用地址清洁剂.所以也要使用-fsanitize=address instrumentation选项.您可能想要使用其他消毒剂,也许-fsanitize=undefined和/或-fsanitize=leak......

最后,你可以重新定义你自己的realloc(上面平原malloc&free),或更仔细地有一定的myrealloc功能,总是重新分配和移动存储.

您甚至可以改进代码,在几个数据结构或类型中(或之后)添加一些标记或一些幻数.

您可能会阅读有关垃圾收集技术的更多信息(例如使用GC手册).它们提供了有用的见解,概念和术语.而Boehm的GC也可以用作内存调试器.