Я пытаюсь написать несколько макросов для отладки кода, над которым я работаю, но у меня возникла проблема, и я не уверен, как ее решить. Я хотел бы обернуть malloc другой функцией, а затем использовать макрос, чтобы заменить любые вызовы оболочкой. Проблема в том, что сама оболочка должна вызывать malloc. У меня есть такой файл заголовка:
memory.h:
#define malloc(X) my_malloc( X, __FILE__, __LINE__, __FUNCTION__ )
#define free(X) my_free( X )
void *my_malloc(size_t size, const char *file, int line, const char*func);
void my_free(void *ptr);
Тогда у меня есть связанный файл .c для определения функций оболочки.
memory.c:
#include "memory.h"
void *my_malloc(size_t size, const char *file, int line, const char*func) {
void *ptr = malloc(size);
/* do stuff */
return ptr;
}
void my_free(void *ptr) {
/* do stuff */
free(ptr);
}
Наконец, у меня есть код, где я хочу, чтобы макросы работали.
main.c
int main(int argc, char **argv) {
int *my_ptr = malloc( sizeof(int) );
free(my_ptr);
return 0;
}
Проблема, с которой я сталкиваюсь, заключается в том, что функция становится рекурсивной и вылетает из программы. У меня вопрос, есть ли способ, которым я могу отделить свою реализацию от моего заголовочного файла и при этом получить доступ к реальной функции malloc изнутри (то есть, чтобы .c-файл знал, что нужно вызывать правильный malloc вместо замены препроцессора? это)?
Заранее спасибо!