【发布时间】:2018-04-06 12:01:58
【问题描述】:
我目前正在用 C 语言编写一个大量面向数据的库。在过去的几个小时里,我一直在寻找一个段错误,该段错误是由于在库深处使用 realloc 进行内存重定位而导致的悬空指针引起的。由于这个错误只是由于库的另一部分中的内存泄漏而发生的,我想知道是否有办法使这类错误更具重现性。
我有一个想法,也许有一种方法可以强制 realloc 在每次调用时重新分配分配的内存。我想在单元测试时这样做,以便及早发现此类错误。
是否有这样一个 LD_PRELOAD 库(或类似库)以某种方式挂钩 malloc/realloc/... 调用,从而导致悬空指针提前崩溃?
该库旨在跨平台,但我猜内存错误是 C 中为数不多的可移植事物之一。
【问题讨论】:
-
您可以在 Stack Overflow 中搜索“interpose”以了解执行您请求的方法,尽管其他工具(例如 valgrind)可能在不同的方面更有用或有用。
-
如果您使用的是
gcc,请查看--wrap选项(请参阅here)。这将让您定义自己的wrap_realloc(),当任何代码调用realloc()时,链接器都会调用它。 -
没有办法强制重定位,但是您可以将
realloc定义为一个自定义函数,分配一个新区域然后复制数据。仅在调试编译打开时启用此功能,以避免生产版本的开销。 -
您的图书馆有多大?在哪个操作系统上?它是多线程的吗?数据有多大,测试...?是免费软件吗?它究竟是做什么的?请编辑您的问题以提供更多详细信息。
标签: c unit-testing realloc