У меня есть непрозрачная структура вместе с функциями выделения / освобождения в заголовочном файле. Вот оно:
my_strct.h
* * 1004
typedef struct helper helper;
helper *allocate_helper(void);
void release_helper(helper *helper_ptr);
typedef struct my_struct;
my_struct *allocate_mystruct(void);
void release_mystruct(my_struct *ptr);
my_strct.c
#include "my_strct.h"
struct helper{
const char *helper_info;
}
helper *allocate_helper(void){
return malloc(sizeof(struct helper));
}
void release_helper(helper *helper_ptr){
if(helper_ptr){
free(helper_ptr -> helper_info);
free(helper_ptr);
}
}
struct my_struct{
const char *info;
const char *name;
struct helper *helper_ptr
}
my_struct *allocate_mystruct(void){
struct my_struct *mystruct_ptr = malloc(sizeof(mystruct_ptr));
mystruct_ptr -> helper_ptr = allocate_helper();
}
void release_mystruct(struct my_struct *mystruct_ptr){
if(mystruct_ptr){
release_helper(mystruct_ptr -> helper_ptr);
free(mystruct_ptr -> info);
free(mystruct_ptr -> name);
free(mystruct_ptr);
}
}
Проблема возникла, когда я попытался написать модульный тест для функции освобождения release_mystruct
, чтобы убедиться, что она не вызывает утечку памяти. Мы не можем просто перехватить все вызовы free
, как мы это делаем в Java
, откуда я также переопределил функции из стандартной библиотеки - неопределенное поведение.
Есть ли способ решить проблему?