我最近使用Valgrind使用CuTest库编写的单元测试来分析我的C项目。事实证明,我的所有CuSuite
和CuTest
都泄露了。我正在使用主套件设置,其中许多较小的套件被添加到一个大套件中,然后我运行。
首先,我尝试在主套件上使用CuSuiteDelete
,但所有其他套件仍然泄露。在我的下一次尝试中,我首先删除了所有其他套件,然后是主套件。这导致了段错误,因为删除套件也会释放其中的所有测试。由于将套件添加到另一套件只需复制所有CuTest
指针,第二次调用CuSuiteDelete
将尝试释放已释放的CuTest
。
还有另一种方法可以做到这一点,避免内存泄漏和段错误吗?如果没有,这是CuTest中的一个错误。虽然单元测试通常是退出前唯一由进程运行的,但仍然没有文档记录。
以下是我提出的一些解决方案:
CuTest
添加引用计数。 CuSuiteAddSuite
将增加此值,CuTestDelete
将减少它,仅当refcount达到0时才删除测试。CuSuite
添加套件的每个套件中添加CuSuiteAddSuite
数组。这可能需要为套件引用refcount。