51Testing软件测试论坛

标题: 请教对于内存分配释放问题 [打印本页]

作者: liulinzhu    时间: 2007-6-11 13:42
标题: 请教对于内存分配释放问题
有一个问题一直困扰着我:就是关于形参是结构体指针的问题。
例如:    int funa (struct TIMER_STRUCT *p )
          {
                int ret;
                ret=p.data;                        
                return ret;
           }

testcase: void test_funa( void )
              {
                     struct TIMER_STRUCT *p;
                     p=(struct TIMER_STRUCT *) malloc(sizeof(struct TIMER_STRUCT));
                     p.data=5;
                     CU_ASSERT(5==funa(p));
                     free (p);
               }

其中,mallocfree这两条语句能否省略?概念不明白,呵呵
作者: kevin_park315    时间: 2007-6-11 16:57
我们的口号是:能省者省,能测者测!
作者: liulinzhu    时间: 2007-6-12 08:40
可好像分配空间和释放不能省略吧?
作者: tugang11    时间: 2007-6-12 09:56
沉默~~~~~~~~~~
作者: ppent    时间: 2007-6-12 10:02
标题: 回复 #1 liulinzhu 的帖子
楼主做单元测试的啊,向你学习!
你是开发人员还是测试人员啊?
我觉得还是要分配和释放的.
作者: liulinzhu    时间: 2007-6-12 10:12
标题: 回复 #5 ppent 的帖子
我是公司所谓的测试人员,做单元测试是主要给前阶段开发人员遗留下来的一些代码给补充测试,
没办法啊。
向我学习就谈不上了,我也是新手,我们一起讨论一起进步!
我也是觉得不能省略的。sdlkfj2
作者: xiaocuier    时间: 2007-6-14 13:16
1.如果你定义p 为指针类型就不能省略的,因为struct TIMER_STRUCT *p;只是初始化了一个指针,而没有指向任何地方,malloc就是分配一块内存地址给这个指针来指向它,然后再对这个指针指向的内容进行操作。最后操作结束就释放(free),如果不释放就是内存泄漏了。 另外你这里有个小问题,因为p是指针,给它里面的变量付值的时候应该用 p->data=5;
2.这里也可以不定义p为指针类型,直接
struct TIMER_STRUCT p;
然后就不需要分配地址给它,就不需要malloc和free了,然后传递给函数的时候使用它的地址:
CU_ASSERT(5==funa(&p));
就可以了。
作者: liulinzhu    时间: 2007-6-14 13:30
标题: 回复 #7 xiaocuier 的帖子
感谢xiaocuier
sdlkfj3




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2