回 帖 发 新 帖 刷新版面

主题:[讨论]这样编码内存会有垃圾吗

[code=c]
#include"stdio.h"
#include"math.h"

typedef struct
{
    double x;  //直角坐标x
    double y;  //直角坐标y
} PointL;

typedef struct
{
    double a;  //弧度
    double r;  //极半径
} PointPolar;

PointJ getPointJ(PointL dot)
{
    PointJ *p;
    p = (PointJ*)malloc(sizeof(PointJ));
    p -> a = atan2(dot.y, dot.x);      //转化角度
    p -> r = sqrt(s.x*s.x + s.y*s.y);  //转化半径
    return *p;   //指针p 会消失吗? 内存中的数据会变垃圾吗?
}
int main()
{
    PointL s;
    s.x = 10;
    s.y = 10;
    PointJ p = getPointJ(s);
    printf("%f\n", p.a);   
}
[/code]

回复列表 (共6个回复)

沙发


我不知道该怎么检查内存里的东西, 退出程序后会不会存在。

板凳


对不起第二个结构体最后是

typedef struct
{
    double a;
    double r;
} PointJ;

3 楼

一般情况,有malloc就必须有对应的free,否则肯定会内存泄漏!您现在这个就是“一般情况”。

另:函数返回时会调用PointJ的复制构造函数。除非你返回的是PointJ指针。

4 楼


谢谢, 可是感觉这样编码些很别扭。 还得练啊 [em10]

5 楼

寻找中国的最优秀的网商领袖精英  
当今世界正经历着全球经济一体化的大潮,中国本土企业也因此面临着前所未有的机遇与挑战。
在这场洗礼中,哪些互联网平台有能力成为世界级的电子商务平台?网商精英要怎样做,才能最终成长为世界级网商精英领袖?
淘宝商盟平台震撼登场,携手淘宝30万商家联盟购物商城。
平台刚刚启动,互联网的网商精英请咨询qq: 908889846 
占领市场第一先机,合力打造网商系统!
淘宝商盟官网   www.taobaosm.com
 http://blog.sina.com.cn/tbsm8
淘宝商盟奖励制度

6 楼

getPointJ 返回值方式不正确,这里返回的是对象,接口调用者收到的是对象的拷贝,因此他得不到接口内部分配的地址,无法释放内存。

我来回复

您尚未登录,请登录后再回复。点此登录或注册