关于在函数内用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;
}
------解决方案--------------------
对,释放成功不成功那是操作系统的事~~~
------解决方案--------------------
各位大侠,请问我下面的那段代码会不会产生内存泄漏???
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;
}
------解决方案--------------------
对,释放成功不成功那是操作系统的事~~~
------解决方案--------------------