最近在一个STM32F4项目用到PNG图片,网上找到 LodePNG.c 和 LodePNG.h 两个文件,很快的就将一个小小的 64x64点的 PNG 图片解压并显示出来。
但是,慢慢增大图片尺寸,到320x168就不行了,总会返回空间不够的信息。
幸亏硬件设计中,通过FPGA外挂了一片32M字节的SDRAM,自己写代码,在SDRAM上实现了一个4M字节的堆,提供了接口给 LodePNG调用。
起先一切正常,程序循环几次后,再次出现空间不够的现象。追踪自己编的 malloc 和 free 函数,并查看内存占用情况,发现是第二块申请的内存没有释放,多循环几次,堆空间就耗尽了。
再检查 LodePNG 代码,发现在 lodepng_decode 函数里,malloc申请空间给了*out,却没有 free。
加上一句 lodepng_free(*out),万事大吉!