Chinaunix首页 | 论坛 | 博客
  • 博客访问: 442857
  • 博文数量: 78
  • 博客积分: 2307
  • 博客等级: 上尉
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-04 00:31
个人简介

IT老鸟,信息安全硕士。

文章分类
文章存档

2017年(2)

2012年(21)

2011年(55)

分类: C/C++

2011-10-22 15:21:31

指针也是值传递.这样才能改值.

#include "process.h"
#include "string.h"
#include "stdlib.h"
void testmemory(char **ptr){
     *ptr=(char*)malloc(sizeof(char)*256);
  printf("strlen(ptr)=%d\n",strlen(*ptr));
     //return ptr;
}
int main(int argc, char* argv[])
{
 char* ptr1;
    char a[100];
    testmemory(&ptr1);
    printf("strlen(ptr1)=%d\n",strlen(ptr1));

free(ptr1);

    system("PAUSE");
 return 0;
}

阅读(3250) | 评论(13) | 转发(0) |
给主人留下些什么吧!~~

blacksapper2011-11-01 17:21:30

whyliyi: 还真能运行,但是,我在VS2005上跑出来:两个printf打印输出的结果是272,不知道这是为什么。。。。.....
其实我跑出来的也是272.还没关注为啥。下次看看。

blacksapper2011-11-01 17:18:03

chenliangmoran: 这样子解决了内存泄露的问题。

您的代码还可以继续优化,通常来讲,程序员在调用函数接口时,不希望调用完后还要自己做一些收尾工作,即代码要尽量做到高内聚,.....
当我想再次改的时候发现这个不是我的初衷。我的初衷是一般值传递只要在使用函数的时候
使用
foo(&i)
这样就是引用传递了。
我一般比较懒。于是在foo实现的过程中
foo(int &i)
这样别人调用的时候就不用改了。
之前以为指针是引用传递的,事实不是这样。
至于您说的还是在工程开发的时候用吧。于是博文还是不改了。
给别人用的函数,尽可能的考虑周到。屏蔽相关细节。
如果是自己写博文也这样有点太累了。
比如我发现了1+1等于2.
好像在整数是这样。在分数也是这样。实数和复数内亦然。

chenliangmoran2011-10-31 13:55:01

blacksapper: 谢谢提醒我来改.....
这样子解决了内存泄露的问题。

您的代码还可以继续优化,通常来讲,程序员在调用函数接口时,不希望调用完后还要自己做一些收尾工作,即代码要尽量做到高内聚,低耦合。

回过头来看您的代码,调用了testmemory后需要在外部做free这个收尾工作,这一点很容易引起bug,当别人调用时,忘记free就会内存泄露。

当然,这个规则也要看实际场景,不可一概而论。

blacksapper2011-10-31 10:48:38

chenliangmoran: testmemory中只有malloc,却不做free的动作,这样子会引起内存泄露的。.....
谢谢提醒我来改

chenliangmoran2011-10-31 08:57:52

testmemory中只有malloc,却不做free的动作,这样子会引起内存泄露的。