В настоящее время я поддерживаю пул памяти. Недавно я добавил вызовы функций valgrind в этот пул, чтобы сделать его более полезным для обнаружения ошибок valgrind, возникающих при использовании указанного пула. С этим я хочу написать модульный тест, чтобы убедиться, что мои вызовы функций valgrind работают должным образом. Например,
int main(void)
{
int * test = pool_malloc(sizeof(*test)); // details not important
*test = 3;
pool_free(test); // details not important
if (*test == 2)
{
printf("HERE");
}
assert(VALGRIND_COUNT_ERRORS == 1);
}
Этот код теперь корректно выдает мне недопустимую ошибку чтения, тогда как раньше этого не было, даже если память была возвращена в пул, на самом деле это не free
-d. Однако я не могу использовать этот точный код, поскольку наша структура модульного теста предполагает, что любые ошибки valgrind означают, что тест не пройден, и поэтому мой вышеописанный тест не пройден. Я попытался использовать VALGRIND_DISABLE_ERROR_REPORTING
, но это также отключает не только отчеты, но и проверку ошибок - т.е. VALGRIND_COUNT_ERRORS
теперь возвращает 0. Что я действительно хочу, это что-то вроде VALGRIND_DISABLE_ERROR_REPORTING_BUT_KEEP_COUNTING_ERRORS_THAT_OCCUR
- что-то подобное существует? Есть ли лучший способ выполнить то, что я хочу сделать?