lvxuzhou


私信TA

用户名:lvxuzhou

访问量:1647

签 名:

lvxuzhou

排  名 1206
经  验 649
参赛次数 0
文章发表 19
年  龄 0
在职情况
学  校 西安
专  业

  自我简介:

直接贴代码

核心思想:

1、自己封装内存分配函数mymalloc,在该函数中将分配的内存地址,插入链表中。

2、自己封装内存释放函数myfree,将传入的内存地址从链表中删除。

3、程序末尾,再次检查链表中是否有数据,如果不为空,说明忘记释放,内存泄漏了,此时从链表中取个内存地址,依次释放。

#include<stdio.h>
#include<stdlib.h>
#include<cstl/clist.h>            //谷歌开源的
#include<cstl/calgorithm.h>       //谷歌开源的
list_t* pslist_coll1 = NULL;      //创建链表指针,并初始化
static void*mymalloc(size_t size)
{
    if (size <= 0)
    {
      return NULL;
    }
	void* p=malloc(size);    //将分配的地址插入链表
	list_push_front(pslist_coll1,p);
	return p;
}
static void myfree(void* p) 
{
	if (p != NULL)
	{
		list_remove(pslist_coll1,p);    //将释放的地址从链表删除
		free(p);
	}
}
static void _print(const void* cpv_input, void* pv_output)
{
	printf("%p ", cpv_input);    //打印链表中的地址
}

int main() 
{
	pslist_coll1 = create_list(void*);    //创建链表,地址数据本质就是void*类型
	list_init(pslist_coll1);              //链表初始化  
	void* p1=mymalloc(1);
	void* p2=mymalloc(1);
	void* p3=mymalloc(1);
	void* p4=mymalloc(1);
	
	printf("释放前的内存地址: ");
	algo_for_each(list_begin(pslist_coll1), list_end(pslist_coll1), _print); //链表遍历
	myfree(p1);
	myfree(p2);
	myfree(p3);
	myfree(p4);
	printf("\n释放后的内存地址: ");
	algo_for_each(list_begin(pslist_coll1), list_end(pslist_coll1), _print);
	getchar();
	return 0;
}

运行结果如图:

QQ图片20180915171353.png

个人交流qq:757368775

  评论区

非常适合新人学习的知识啊
2018-09-16 19:27:26 | |
  • «
  • 1
  • »