当前位置: 技术问答>linux和unix
free问题,麻烦大家给指点一下。代码在文章内容中
来源: 互联网 发布时间:2015-12-31
本文导语: file_t *file_create(char *name, uint32_t size, uint8_t ver) { if (name!=NULL) { fd=creat(name,0600); if (fd!=-1) { lseek(fd,0,SEEK_SET); file_t * tempfile_t; tempfile_t=(file_t *)malloc(sizeof(file_t)); char * in...
file_t *file_create(char *name, uint32_t size, uint8_t ver)
{
if (name!=NULL)
{
fd=creat(name,0600);
if (fd!=-1)
{
lseek(fd,0,SEEK_SET);
file_t * tempfile_t;
tempfile_t=(file_t *)malloc(sizeof(file_t));
char * inbuf=NULL;
if(inbuf==NULL)
{
inbuf=(char *)malloc(size*sizeof(char));
memset(inbuf,'*',size);
}
write(fd,inbuf,size);
if(inbuf!=NULL)
{
free(inbuf);
}
inbuf=NULL;
char * outbuf=NULL;
if(outbuf==NULL)
{
outbuf=(char *)malloc(size*sizeof(char));
}
read(fd,outbuf,size);
strcpy(tempfile_t->name,name);
tempfile_t->size=size;
tempfile_t->buffer=outbuf;
tempfile_t->ver=ver;
if(outbuf!=NULL)
{
free(outbuf);
}
outbuf=NULL;
// free(tempfile_t);
return tempfile_t;
}
else
{
return NULL;
}
}
else
{
return NULL;
}
}
问题就是我给结构体tempfile_t指针malloc一块区域后,tempfile_t作为返回值。所以没有办法free掉它。见注释行。我现在想在另一函数中比如file_close函数中释放他,但是好像又不可能。希望大家给个方法,把tempfile_t指针free掉。函数参数跟结构体的结构是不能改的。有什么方法吗?
{
if (name!=NULL)
{
fd=creat(name,0600);
if (fd!=-1)
{
lseek(fd,0,SEEK_SET);
file_t * tempfile_t;
tempfile_t=(file_t *)malloc(sizeof(file_t));
char * inbuf=NULL;
if(inbuf==NULL)
{
inbuf=(char *)malloc(size*sizeof(char));
memset(inbuf,'*',size);
}
write(fd,inbuf,size);
if(inbuf!=NULL)
{
free(inbuf);
}
inbuf=NULL;
char * outbuf=NULL;
if(outbuf==NULL)
{
outbuf=(char *)malloc(size*sizeof(char));
}
read(fd,outbuf,size);
strcpy(tempfile_t->name,name);
tempfile_t->size=size;
tempfile_t->buffer=outbuf;
tempfile_t->ver=ver;
if(outbuf!=NULL)
{
free(outbuf);
}
outbuf=NULL;
// free(tempfile_t);
return tempfile_t;
}
else
{
return NULL;
}
}
else
{
return NULL;
}
}
问题就是我给结构体tempfile_t指针malloc一块区域后,tempfile_t作为返回值。所以没有办法free掉它。见注释行。我现在想在另一函数中比如file_close函数中释放他,但是好像又不可能。希望大家给个方法,把tempfile_t指针free掉。函数参数跟结构体的结构是不能改的。有什么方法吗?
|
老实说你的代码是一团糟!不知道你想干什么
malloc和free在代码中应该搭配出现的:分配一片内存就应当有一个释放这块内存的操作,不能多次释放同一个内存块,当然少释放在你现在的代码量中也许不会出现什么错误!
malloc和free在代码中应该搭配出现的:分配一片内存就应当有一个释放这块内存的操作,不能多次释放同一个内存块,当然少释放在你现在的代码量中也许不会出现什么错误!