王朝网络
分享
 
 
 

gSOAP中内存的使用

王朝other·作者佚名  2008-06-01
宽屏版  字体: |||超大  

一.概述2

二.例子程序简要说明2

三.server端2

四.client端3

五.Valgrind的使用3

六.参考文档4

七.备注4

一.概述

在gSOAP的server和client端连接中,内存的处理有些是gSOAP自己处理的,有些需要我们来考虑。本文档主要就其中目前可能碰到的内存问题,做一个简要的介绍及说明。另外,简要介绍了一下内存检测工具valgirnd的使用及注重事项。

二.例子程序简要说明

例子程序实现的是client端传入一个参数num,server端返回一个字符串,是一段不知道多长的buffer,这样需要在server端动态分配空间。这段内存的治理是本文主要讨论的问题。例子的实现可能有些冗余,但是为了说明一些问题,所以做了一些多余的实现。

得到的server端名称为getmsgserver,client端名称为getmsgtest,server启动在8888端口。

三.server端

省略server端的main函数,其功能实现函数如下:

int ns__getmsg(strUCt soap *getmsg_soap, int num, char **msg)

{

//下面这个空间为我们自己分配的空间,所以后来需要用free显式释放,在xmail系统中可能是从mss获取到的一段buffer,例子中的1024是随意填写的

char *a=(char*)malloc(1024);

memset(a, 0, 1024);

sprintf(a, "num=%d\n",num);

//下面这个空间由soap分配,在server端的main函数中由soap_end释放该空间,由soap自己来控制,还可以直接使用*msg = soap_strdup(getmsg_soap, a)实现下面3句话,但是这个函数只适用于char*的拷贝,假如是struct的copy还是使用下面的实现方式

*msg = (char*)soap_malloc(getmsg_soap, 1024);

memset(*msg, 0, 1024);

//将我们的buffer(可能是从mss获取的)拷贝到soap治理的空间中

memcpy(*msg, a, strlen(a));

//释放由我们自己分配的空间

free(a);

return 0;

}

四.client端

client端做了简单的封装,封装后的函数如下:

int getmsg( const char* server, int num, char **msg )

{

struct soap getmsg_soap;

int result = 0;

char *getmsg = NULL;

soap_init(&getmsg_soap);

soap_set_namespaces(&getmsg_soap, getmsg_namespaces);

//下面是从server端获取数据,注重,得到的buffer在调用soap_end后空间就会被释放,所以需要定义变量getmsg,不能直接将参数msg作为此处的最后一个参数。当然,假如是在使用完msg后才调用soap_end,或者不需要将msg传出,此处就可以直接将msg作为最后一个参数。

soap_call_ns__getmsg( &getmsg_soap, server, "", num, &getmsg );

if(getmsg_soap.error)

{

printf("soap error:%d,%s,%s\n", getmsg_soap.error, *soap_faultcode(&getmsg_soap), *soap_faultstring(&getmsg_soap) );

result = getmsg_soap.error;

}

//将从server端得到的buffer转储到msg中

if(getmsg)

{

*msg = strdup(getmsg);

}

soap_end(&getmsg_soap);

soap_done(&getmsg_soap);

return result;

}

这样,调用完函数int getmsg( const char* server, int num, char **msg )后,需要释放最后一个参数的空间,这个与一般的c程序相同。

五.Valgrind的使用

直接在终端键入valgrind,然后回车,可以看见一些帮助,以下是几个常用的选择项,选项可以联合使用:

1.对server端进行非法指针操作检测:

shell>valgrind ./getmsgserver 8888

在另外一个终端执行

shell>./getmsgtest 89

2.对server端进行内存泄漏检测,在main函数的soap_end后面添加一个exit(0),以便观察server接收一次请求后退出的情况,这样可以真实查看内存是否完全释放:

shell>valgrind --leak-check=yes ./getmsgserver 8888

在另外一个终端执行

shell>./getmsgtest 89

3.对server端进行内存检测,是否有些内存没有完全回收:

shell>valgrind –show-reachable=yes./getmsgserver 8888

在另外一个终端执行

shell>./getmsgtest 89

4.对client端进行非法指针操作检测:

shell>./getmsgserver 8888

在另外一个终端执行

shell> valgrind ./getmsgtest 89

5.对client端进行内存泄漏检测:

shell>./getmsgserver 8888

在另外一个终端执行

shell>valgrind --leak-check=yes ./getmsgtest 89

6.对client端进行内存检测,是否有些内存没有完全回收:

shell>./getmsgserver 8888

在另外一个终端执行

shell> valgrind –show-reachable=yes ./getmsgtest 89

六.参考文档

1.gSOAP的内存治理

http://www.cs.fsu.edu/~engelen/soapdoc2.Html#tth_sEc9.13

2.Valgrind的主页

http://valgrind.kde.org/

七.备注

在192.168.18.233的/home/weiqiong/soap/getmsg目录下有本文讲到的例子。用法更复杂的例子参见cvs中的xmail/pmd/ws/addrbook目录下的实现,是从mss获取地址本的实现。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有