我正在学习介入。下面的代码取自课程(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)