我使用Valgrind在memcheck进程期间编写了两段如下所示的c程序,给出了很多mem泄漏信息。可能的内存泄漏问题
int
GetMemory(int framewidth,
int frameheight,
int SR/*, int blocksize*//*,int ALL_REF_NUM*/)
{
//int i,j;
int memory_size = 0;
//int refnum = ALL_REF_NUM;
int input_search_range = SR;
memory_size += get_mem2D(&curFrameY, frameheight, framewidth);
memory_size += get_mem2D(&curFrameU, frameheight>>1, framewidth>>1);
memory_size += get_mem2D(&curFrameV, frameheight>>1, framewidth>>1);
memory_size += get_mem3D(&prevFrameY, refnum, frameheight, framewidth);// to allocate reference frame buffer accoding to the reference frame number
memory_size += get_mem3D(&prevFrameU, refnum, frameheight>>1, framewidth>>1);
memory_size += get_mem3D(&prevFrameV, refnum, frameheight>>1, framewidth>>1);
memory_size += get_mem2D(&mpFrameY, frameheight, framewidth);
memory_size += get_mem2D(&mpFrameU, frameheight>>1, framewidth>>1);
memory_size += get_mem2D(&mpFrameV, frameheight>>1, framewidth>>1);
memory_size += get_mem2D(&searchwindow, input_search_range*2 + blocksize, input_search_range*2 + blocksize);// to allocate search window according to the searchrange
/*memory_size +=*/ get_mem1D(/*&SAD_cost, height, width*/);
// memory_size += get_mem2D(&searchwindow, 80, 80);// if searchrange is 32, then only 32+1+32+15 pixels is needed in each row and col, therefore the range of
// search window is enough to be set to 80 !
memory_size += get_mem2Dint(&all_mv, height/blocksize, width/blocksize);
return 0;
}
void
FreeMemory(int refno)
{
free_mem2D(curFrameY);
free_mem2D(curFrameU);
free_mem2D(curFrameV);
free_mem3D(prevFrameY,refno);
free_mem3D(prevFrameU,refno);
free_mem3D(prevFrameV,refno);
free_mem2D(mpFrameY);
free_mem2D(mpFrameU);
free_mem2D(mpFrameV);
free_mem2D(searchwindow);
free_mem1D();
free_mem2Dint(all_mv);
}
void free_mem1D()
{
free(SAD_cost);
}
现在我希望,以确保地方都在我的计划中可能出现的问题? 在这里,我可能会发布一些valgrind信息,让你知道实际的错误信息。
== 29105 ==由0x804A906:主(me_search.c:1480)
== 29105 ==
== 29105 ==
== 29105 == HEAP内容:
== 29105 ==在使用中在出口处:在18个块
== 29105 ==总堆使用124088个字节:37个allocs,21周的FreeS,749276个字节分配
== 29105 ==
== 29105 ==在1块272个字节仍然在损失记录29105 ==在0x402425F 18 1的
==可达:释放calloc(vg_replace_malloc.c: 467)
== 29105 ==由0x804A296:get_mem2D(me_search.c:1315)
== 29105 ==由0x804885E:GetMemory(me_search.c:117)
== 29105 = = by 0x804A757:main(me_search.c:1 456)
== 29105 ==
== 29105 ==在1块352个字节仍然在损失记录2 18的
== 29105 ==在0x4024F20可达:malloc的(vg_replace_malloc。 C:236)
== 29105 ==由0x409537E:__fopen_internal(iofopen.c:76)
== 29105 ==由0x409544B:的fopen @@ GLIBC_2.1(iofopen.c:107)
== 29105 =通过= 0x804A660:主(me_search.c:1439)
== 29105 ==
== 29105 ==在1块584个字节仍然在损失记录3 18
可达== 29105 ==在0x402425F:释放calloc(vg_replace_malloc.c:467)
== 29105 ==由0x804A296:get_mem2D(me_search.c:1315)
== 29105 ==由0x8048724:GetMemory(me_search。 c:106)
== 29105 == by 0x804A757:main(me_search。C:1456)
== 29105 ==
== 29105 ==在1块584个字节仍然在损失记录4 18
==在0x402425F 29105 ==可达:释放calloc( vg_replace_malloc.c:467)
== 29105 ==由0x804A296:get_mem2D(me_search.c:1315)
== 29105 ==由0x8048747:GetMemory(me_search.c:107)
== 29105 ==由0x804A757:主(me_search.c:1456)
== 29105 ==
== 29105 ==在1块584个字节仍然在损失记录18 == 29105 5的
可达= =上0x402425F:释放calloc(vg_replace_malloc.c:467)
== 29105 ==由0x804A296:get_mem2D(me_search.c:1315)
== 29105 ==由0x8048809:GetMemory(me_search.c: 114)
== 29105 ==由0x804A757:主(me_search.c:1456)
== 29105 ==
== 29105 ==在1块584个字节仍然在损失记录18
6的可达== 29105 ==在0x402425F:释放calloc(vg_replace_malloc.c:467)
== 29105 ==由0x804A296:get_mem2D(me_search.c:1315)
== 29105 ==通过0x804882C :GetMemory(me_search.c:115)
== 29105 ==由0x804A757:主(me_search.c:1456)
== 29105 ==
== 29105 ==在1块584个字节中记录损失18 7的肯定丢失
== 29105 ==在0x402425F:释放calloc(vg_replace_malloc.c:467)
== 29105 ==由0x804A296:get_mem2D(me_search.c:1315)
== 29105 ==由0x804A4F8:get_mem3D(me_search.c:1393)
== 29105 ==由0x804879B:GetMemory(me_search.c:110)
== 29105 ==由0x804A757:主(me_search.c:1456)
== 29105 ==
== 29105 ==在1块584个字节中记录损失8 18
==在0x402425F 29105 ==肯定丢失:释放calloc(vg_replace_malloc.c:467)
== 29105 ==由0x804A296:get_mem2D(me_search。C:1315)
== 29105 ==由0x804A4F8:get_mem3D(me_search.c:1393)
== 29105 ==由0x80487C9:GetMemory(me_search.c:111)
== 29105 ==通过0x804A757:主(me_search.c:1456)
== 29105 ==
== 29105 ==在1块1168个字节仍然在9的损失记录可达18
== 29105 ==在0x40242 5F:释放calloc(vg_replace_malloc.c:467)
== 29105 ==由0x804A296:get_mem2D(me_search.c:1315)
== 29105 ==由0x8048701:GetMemory(me_search.c:105)
== 29105 ==由0x804A757:主(me_search.c:1456)
== 29105 ==
== 29105 ==在1块1168个字节仍然在损失记录10可到达的的18
== 29105 ==在0x402425F:释放calloc(vg_replace_malloc.c:467)
== 29105 ==由0x804A296:get_mem2D(me_search.c:1315)
== 29105 ==由0x80487E6:GetMemory (me_search.c:113)
== 29105 ==由0x804A757:主(me_search.c:1456)
== 29105 ==
== 29105 ==在1块1168个字节肯定输了18场失利纪录11
== 29105 ==在0x402425F:释放calloc(vg_replace_malloc.c:467)
== 29105 ==由0x804A296:get_mem2D(me_search.c:1315)
== 29105 ==由0x804A4F8: get_mem3D(me_search.c:1393)
== 29105 ==由0x804876D:GetMemory(me_search.c:109)
== 29105 ==由0x804A757:主(me_search.c:1456)
== 29105 ==
== 29105 ==在1块6336个字节中记录损失18 12
==在0x4024F20 29105 ==肯定丢失:malloc的(vg_replace_malloc.c:236)
== 29105 ==通过0x804A25C:get_mem1D(me_search.c:1295)
== 29105 ==由0x8048866:GetMemory(me_search.c:119)
== 29105 ==由0x804A757:主(me_search。C:1456)
是什么让你觉得有内存泄漏?你有什么试图找到它?你想达到什么目的?这个代码*应该做什么?请添加更多信息以帮助那些试图帮助您的人。 – DevinB 2010-06-07 09:14:55
因为我发现我无法在linux环境下在我的Firefox浏览器中编辑帖子。因此,我首先通过该程序,然后转到另一台计算机编辑此帖。 对不起,造成的不便。 – MaiTiano 2010-06-07 09:18:12
您是否验证过FreeMemory是否被卡住? – DevinB 2010-06-07 09:22:38