藤井あいさ网盘下载:很简单的c函数,看看啊。。。。

来源:百度文库 编辑:中科新闻网 时间:2024/05/01 17:04:03
我写了一个c的头文件,当别人包含我这个头文件使用下面这个函数时,我或使用者要把分配的内存释放掉,怎么释放啊,我和使用者一起写的一个程序。不太懂malloc的指针作用范围,请执教阿,多谢!
struct Point getP1(struct Line line){
struct Point * p = (struct Point *) malloc(sizeof(struct Point ));
p->x = line.x1;
p->y = line.y1;
return *p;
}
我要是来释放它,那不是没法返回了吗?返回前,值不是已经消失了吗?

这样写会有矛盾(你申请的东西无法释放),你应该充分利用指针,使用下面的办法:
struct Point * getP1(struct Line line){
struct Point * p = (struct Point *) malloc(sizeof(struct Point ));
p->x = line.x1;
p->y = line.y1;
return p;
}

你的伙伴可以这么调用:

struct Point * t_p = 0;
t_p = getP1(t_line);
if(!t_p)return;
.....
free(t_p);

而这样还不是最好的办法,因为如果你的伙伴忘记了释放,就有可能会造成内存泄漏,所以好办法是下面的:
int getP1(struct Line line,struct Point *p){
if(!p)return 0;
p->x = line.x1;
p->y = line.y1;
return 1;
}

调用:
struct Point * p = (struct Point *) malloc(sizeof(struct Point ));
if(getP1(line,p))
{
//成功
}
else
{
//失败
}
free(p);
这样就符合基本的谁申请谁释放了.

在C语言里, 谁申请谁释放,free(p);p=null;

如果要别人释放, 可能是这样定义指针: struct Point **p;