关于在函数内用malloc申请内存,在函数外free的有关问题.

关于在函数内用malloc申请内存,在函数外free的问题....
各位大侠,请问我下面的那段代码会不会产生内存泄漏???

static int UI_read_info(int number, char ***info);

int main(int argc, char* argv[])
{

  char **info=NULL;
  UI_read_info(20, &info);
  for(int i=0; i<20; i++) // 释放申请的内存空间
  {
  free(info[i]);
  }
  free(info);
  info=NULL;

return 0;

}


static int UI_read_info(int number, char ***info)
{
  char temp_str[100]="";
  int str_len=0,i=0,j=0;
   
  /*** 读取文本的内容 ***/
  FILE *fp1=NULL;
  fp1=fopen("D:\\123.txt","r");
  if(fp1 != NULL)
  {
  char **temp_pointer=NULL;
  temp_pointer=(char **)malloc(sizeof(char *) * number); // 申请内存空间
  if(temp_pointer==NULL) // 申请内存空间失败则退出
  {
  fclose(fp1);
  return -1;
  }
  for(i=0; i<number; i++)
  {
  temp_pointer[i]=(char *)malloc(sizeof(char) * 60);
  }
   
  fgets(temp_str, 100, fp1); // 从流中读一行字符
  while(!feof(fp1) || j<number)
  {
  str_len=strlen(temp_str);
  str_len--;
  temp_str[str_len]='\0'; // 去除换行符
  strcpy(temp_pointer[j],temp_str);
  j++;
  fgets(temp_str, 100, fp1); // 从流中读一行字符 
  }
  fclose(fp1);
  *info=temp_pointer; // 将堆空间的地址赋值给形参
   
  }
   
  return 0;

}

------解决方案--------------------
对,释放成功不成功那是操作系统的事~~~
探讨

引用:

我的意思是说,我这种写法能不能成功释放函数内所申请的内存?因为free(),没有返回值,无法检测它的执行结果!


该free的free了就行了,成不成功释放,那就是操作系统的事儿了,你管不了的。不过你可以默认为总是释放成功的。

------解决方案--------------------
探讨
引用:

我的意思是说,我这种写法能不能成功释放函数内所申请的内存?因为free(),没有返回值,无法检测它的执行结果!


该free的free了就行了,成不成功释放,那就是操作系统的事儿了,你管不了的。不过你可以默认为总是释放成功的。