小编Thà*_*hạm的帖子

编译时插入不起作用

我正在学习介入。下面的代码取自课程(CMU 15-213),但是,当我编译时,出现此警告“mymalloc.c:6:29: warning: all paths through this function will call myself [-Winfinite-recursion]” 。

据我了解,main() 中对 malloc 的调用将转为对 mymalloc() 的调用。在 mymalloc() 内部,再次调用 malloc,因此发生循环。

//int.c

#include <stdio.h>
#include "malloc.h"

int main() {
    int *p = malloc(32);
    free(p);
    return (0);
}
Run Code Online (Sandbox Code Playgroud)
//malloc.h

#include <stdlib.h>
#define malloc(size) mymalloc(size)
#define free(ptr) myfree(ptr)

void *mymalloc(size_t size);
void myfree(void *ptr);
Run Code Online (Sandbox Code Playgroud)
//mymalloc.c

#ifdef COMPILETIME
#include <stdio.h>
#include "malloc.h"

/* malloc wrapper function */
void *mymalloc(size_t size) {
    void *ptr = malloc(size);
    printf("malloc(%d)=%p\n",
           (int)size, ptr);
    return ptr;
}

/* …
Run Code Online (Sandbox Code Playgroud)

c function-interposition

5
推荐指数
1
解决办法
75
查看次数

标签 统计

c ×1

function-interposition ×1