重新定义malloc和free 防止内存泄漏
#define malloc(size) my_malloc(size, __FUNCTION__, __LINE__)
#define free(ptr) my_free(ptr, __FUNCTION__, __LINE__);
因为这样可以跟踪分配及释放内存的具体位置。
每次调用malloc时, 将调用的具体位置(file, function, line), 内存的起始地址, 内存长度等记录下来, 放在链表中。每次调用free时, 删除链表中相应的记录.
分配时, 多分配一定数目的内存, 返回所分配内存的起始地址, 并将多分配的那一段的内存初始化为预定义的值。 以便在后续调用free时检查多分配的那一段内存的值, 看其值是否为预定义的值, 否则有非法内存访问。
malloc时, 检查所分配的内存是否在链表中, 若是, 则内存分配有误。free时, 检查所释放的内存起始地址是否在链表中, 若是, 则释放该段内存,并删除链表中的记录; 否则, 为释放时非法内存。
malloc函数的原型:
(void *)malloc(int size)
malloc函数的返回值是一个void类型的指针,参数为int类型的数据,即申请分配的内存大小,单位