用c语言封装malloc函数,包含调用者名字、行数、申请的大小等
时间: 2023-08-18 13:06:09 浏览: 47
为了封装malloc函数,我们可以定义一个宏来代替malloc的调用,在这个宏中添加额外的参数来记录调用者信息和申请的大小。下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define malloc(size) my_malloc(size, __FILE__, __LINE__)
void* my_malloc(size_t size, const char* file, int line) {
printf("Allocating %zu bytes in file %s at line %d\n", size, file, line);
return malloc(size);
}
int main() {
int* ptr = (int*)malloc(sizeof(int) * 10);
free(ptr);
return 0;
}
```
在上面的代码中,我们使用一个名为my_malloc的函数来替代malloc函数。这个函数接受三个参数:申请的大小、调用者所在的文件名和调用者所在的行数。在函数内部,我们首先打印出申请的大小和调用者信息,然后调用真正的malloc函数来完成内存的分配。
在main函数中,我们使用了一个int类型的指针来申请了10个整型变量的空间。由于我们已经定义了一个名为malloc的宏,所以实际上调用的是我们自己定义的my_malloc函数。
运行程序后,我们可以看到如下输出:
```
Allocating 40 bytes in file test.c at line 9
```
可以看到,我们成功地记录了调用者信息和申请的大小。