C 内存泄漏问题

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

最佳答案

这部分似乎很可疑:

  while (File_Gets(buf,sizeof(buf),fd)!=NULL)
  {
    strcat(*content,buf);
    memset(buf,0x00,sizeof(buf));
  }

特别是strcat()File_Gets() 是否以 null 终止写入 buf[] 的内容?如果不是,那么 strcat() 的读取/复制可能超出了 buf[] 的范围,因为它需要空终止来知道何时停止。

编辑:我应该指出,这是推荐 strncat() 而不是 strcat() 的原因之一。使用字符串函数的“n”个变体(即 strncat()strncpy()strncmp())有助于防止缓冲区溢出和通常是一个很好的做法。

关于C 内存泄漏问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43993787/

相关文章:

c - 合并排序不断循环并进入段错误

Coverity静态分析代码缺陷

ios - 内存管理 : does this code has a memory leak?

c++ - C++ 和字符串 vector 中的内存泄漏或其他问题

c - C中的内存泄漏

c - 交换矩阵的行后出现 double free() 错误

c - OpenSSL EVP AES/DES 加密实现

c++ - 我们什么时候应该使用 RTLD_DEEPBIND?

c - 将代码从 MATLAB 移植到 C(OpenCV)

PHP脚本内存泄漏问题