C内存泄漏问题

时间:2017-05-16 06:17:58

标签: c memory-leaks

程序正在泄漏内存而无法修复它...本程序正在从文本文件中读取数据,在读取数据后,它会在数据执行期间对内存进行泄漏。设备的内存和内存非常有限。由于这个闪存驱动器我无法运行内存泄漏检查工具。 请建议修复内存泄漏问题 请在下面找到代码段

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;    
}

1 个答案:

答案 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())有助于防止缓冲区溢出,通常是一种很好的做法。