1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #include <stdio.h> #include <stdlib.h> #include <unistd.h>
#if 1
void* _malloc(size_t size, const char* filename, int len) { void *ptr = malloc(size); char buff[128] = {0}; sprintf(buff, "./mem/%p.mem", ptr); FILE *fp = fopen(buff, "w"); fprintf(fp, "malloc, filename = %s, line = %d\n", filename, len); printf("malloc, filename = %s, line = %d\n", filename, len); fflush(fp); fclose(fp); return ptr; }
void _free(void*ptr, const char* filename, int len) { char buff[128] = {0}; sprintf(buff, "./mem/%p.mem", ptr); if(unlink(buff) < 0){ printf("double free!\n"); return; } printf("free, filename = %s, line = %d\n", filename, len); free(ptr); }
#define malloc(size) _malloc(size, __FILE__, __LINE__); #define free(ptr) _free(ptr, __FILE__, __LINE__);
#endif
int main() { void *p1 = malloc(5); void *p2 = malloc(10); void *p3 = malloc(15); free(p1); free(p2); }
|