程序正在泄漏内存而无法修复它...本程序正在从文本文件中读取数据,在读取数据后,它会在数据执行期间对内存进行泄漏。设备的内存和内存非常有限。由于这个闪存驱动器我无法运行内存泄漏检查工具。 请建议修复内存泄漏问题 请在下面找到代码段
int LanguageRequiredData(void)
{
char *data=NULL;
int retValue = 0 ;
retValue = GetString_English(&data);
if(retValue>0 && strlen(data)>0)
{
// Do Some Operation
}
if (data!=NULL)
{
Mem_free(data);
data = NULL;
}
}
int GetString_English(char **data)
{
int retValue = 0 ;
retValue = File_LoadContent(LANGSENGFILE,&(*data));
return retValue;
}
int File_LoadContent (char *file, char **content)
{
long size = File_Size(file);
char buf[256]={};
memset(buf,0x00,sizeof(buf));
if (*content)
{
Mem_free(*content);
}
*content = (char*) Mem_alloc((size+1) * sizeof(char));
TFILE * fd; fd=File_Open(file,"r"); if (fd==NULL) return 0;
while (File_Gets(buf,sizeof(buf),fd)!=NULL)
{
strcat(*content,buf);
memset(buf,0x00,sizeof(buf));
}
File_Close(fd); return 1;
}
void * Mem_alloc(size_t size)
{
int i;
void * ptr = NULL;
for (i = 0; i < 2; i++)
{
ptr = malloc(size);
if (ptr)
{
break;
}
}
if (ptr)
{
memset(ptr, 0, size);
}
return ptr;
}
void Mem_free(void * ptr)
{
if (ptr != NULL)
{
free(ptr);
}
ptr = NULL;
}
答案 0 :(得分:0)
这部分似乎很可疑:
while (File_Gets(buf,sizeof(buf),fd)!=NULL)
{
strcat(*content,buf);
memset(buf,0x00,sizeof(buf));
}
特别是strcat()
。 File_Gets()
是否为空 - 终止它写入buf[]
的内容?如果没有,则strcat()
可能正在读取/复制超出buf[]
的范围,因为它需要空终止以知道何时停止。
编辑:我应该指出,这是推荐strncat()
超过strcat()
的原因之一。使用&#34; n&#34;字符串函数的变体(即strncat()
,strncpy()
,strncmp()
)有助于防止缓冲区溢出,通常是一种很好的做法。