gpt4 book ai didi

无法编译 malloc__hooks 的 GNU 示例

转载 作者:行者123 更新时间:2023-11-30 15:37:43 25 4
gpt4 key购买 nike

我从以下位置复制并粘贴了示例 malloc__hook: http://www.gnu.org/software/libc/manual/html_node/Hooks-for-Malloc.html

但是当我尝试编译它时,出现错误:

hooks.c:17:8:错误:“__malloc_initialize_hook”的类型限定符冲突在 hooks.c:4:0 包含的文件中:/usr/include/malloc.h:170:38:注意:之前的“__malloc_initialize_hook”声明在这里

对可能出现的问题有什么想法吗?

这是我的代码:

/* Prototypes for __malloc_hook, __free_hook */
#include <stdio.h>
#include <malloc.h>

/* Prototypes for our hooks. */
static void my_init_hook (void);
static void *my_malloc_hook (size_t, const void *);
static void my_free_hook (void*, const void *);
static void test ();

/* Variables to save original hooks. */
static void *(*old_malloc_hook) (size_t, const void *);
static void *(*old_free_hook) (void*, const void *);

/* Override initializing hook from the C library. */
void (*__malloc_initialize_hook) (void) = my_init_hook;

static void my_init_hook (void)
{
old_malloc_hook = __malloc_hook;
old_free_hook = __free_hook;
__malloc_hook = my_malloc_hook;
__free_hook = my_free_hook;
}

static void * my_malloc_hook (size_t size, const void *caller)
{
void *result;
/* Restore all old hooks */
__malloc_hook = old_malloc_hook;
__free_hook = old_free_hook;
/* Call recursively */
result = malloc (size);
test();
/* Save underlying hooks */
old_malloc_hook = __malloc_hook;
old_free_hook = __free_hook;
/* printf might call malloc, so protect it too. */
printf ("malloc (%u) returns %p\n", (unsigned int) size, result);
/* Restore our own hooks */
__malloc_hook = my_malloc_hook;
__free_hook = my_free_hook;
return result;
}

static void my_free_hook (void *ptr, const void *caller)
{
/* Restore all old hooks */
__malloc_hook = old_malloc_hook;
__free_hook = old_free_hook;
/* Call recursively */
free (ptr);
/* Save underlying hooks */
old_malloc_hook = __malloc_hook;
old_free_hook = __free_hook;
/* printf might call free, so protect it too. */
printf ("freed pointer %p\n", ptr);
test();
/* Restore our own hooks */
__malloc_hook = my_malloc_hook;
__free_hook = my_free_hook;
}


static void test (){
printf("\ntest function called\n");
}

int main(void)
{
char *p;
p = malloc(10);
free(p);
return 0;
}

最佳答案

我相信你应该写:

void (*__MALLOC_HOOK_VOLATILE __malloc_initialize_hook) (void) = my_init_hook; 

而不是:

void (*__malloc_initialize_hook) (void) = my_init_hook;

我在 Debian Wheezy 上测试了它,现在可以编译了。

关于无法编译 malloc__hooks 的 GNU 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22120377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com