Переопределение malloc для размера журнала - PullRequest
0 голосов
/ 14 марта 2012

Я пытаюсь использовать немного кода для регистрации mallocs в tcpdump для моего проекта, код, который я использую, выглядит следующим образом:

#include <stdlib.h>


unsigned int memCount = 0;

void *my_malloc(size_t size) {
void *p = malloc(size);
memCount = memCount + size;
printf("Memory Allocated :%u \n", size
return p;
}

#define malloc(size) my_malloc(size)

После просмотра многих похожих вопросов онлайнкажется, что это должно работать, однако мой пользовательский malloc, похоже, не вызывается.Любая помощь будет высоко ценится, спасибо!

Ответы [ 3 ]

1 голос
/ 14 марта 2012

Вы должны #define макрос malloc в каждом исходном файле снова - таким образом, сделайте это, включив заголовочный файл, в котором определен макрос.

0 голосов
/ 14 марта 2012

Ваша проблема в том, что ваш #define для malloc вызывается вашим my_malloc, когда вы ожидаете, что будет вызван реальный malloc.Причина этого в том, что препроцессор также преобразовал malloc в my_malloc.

Если мы просто предварительно обработаем следующее:

#define malloc(size) my_malloc(size)

unsigned int memCount = 0;

void *my_malloc(size_t size) {
  void *p = malloc(size);
  memCount = memCount + size;
  printf("Memory Allocated :%zu \n", size);
  return p;
}

int main(void) {
  malloc(123);
  return EXIT_SUCCESS;
}

Вы действительно получите:

unsigned int memCount = 0;

void *my_malloc(size_t size) {
  void *p = my_malloc(size);
  memCount = memCount + size;
  printf("Memory Allocated :%zu \n", size);
  return p;
}

int main(void) {
  my_malloc(123);
  return 0;
}

Вам необходим доступ к реальному malloc, который демонстрируется здесь .

0 голосов
/ 14 марта 2012

Должно быть, вы, вероятно, не делаете define видимым для файла, который фактически используете malloc in. Поместите его в общий заголовок, который включен во все ваши файлы реализации.

РЕДАКТИРОВАТЬ: Если проблема заключается в том, что функция сама вызывает, вы должны переместить define после объявления функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...