以下是引用BlueGuy在2010-6-29 21:54:51的发言:
为了解释方便,假设现在程序需要载入500张图片。
给图片结构体 定义一个 id;
typedef struct bgImage
{
int id;
char* buffer;
int width;
int height;
}BGImage;
typedef BGImage* Image;
定义一个 int inspect[500] (初始化为 0)数组来监视内存。
给每个文件名编号,从100开始,(之所以不从0开始编号,是为了处理方便),然后101 ,...
(1)
每次载入图片的时候,根据路径名计算出 图片id。
bgMalloc()
{
ID = (path[0]-'0')*100 + (path[1]-'0')*10 + (path[0]-'0');
img->id = ID;
inspect++;
for (i = 0; i < 500; i++)
{
if (inspect > 1)
printf("内存泄漏");
}
(2)
每次释放图片的时候
bgFree(Image img)
{
inspect--;
free(img->buffer);
img->buffer = NULL;
free(img);
img = NULL;
}
(3)
在某个时刻,根据 监视数组 判断内存是否泄漏。比如程序退出的时候。
for (i = 0; i < 500; i++)
{
if (inspect > 0)
printf("内存泄漏");
}
ID = (path[0]-'0')*100 + (path[1]-'0')*10 + (path[0]-'0');
img->id =
ID;
inspect[img->id - 100]++;
这里可能有问题,img->id - 100 < 0
? 而且这个 ID可能重复?