关于gsoap调用出现 soap_malloc失败出现coredump的解决

 现象:gsoap在调用业务请求时,在AIX用 ps vx|grep 进程号,发现内存使用一直在暴增,直到gsoap调用stdsoap2.cpp方法中某一个malloc操作时失败。程序崩溃。

 

解决:

原因在于使用gsoap的stdsoap.h时候,需要注销掉如下:
/*#  ifndef SOAP_MEM_DEBUG
#   define SOAP_MEM_DEBUG
#  endif*/
该代码在gsoap.2.7.9l版本 1100-1102行,2.8.3版本在1337-1339行。因为打开这个宏定义,进程生命期调soap服务会一直申请进程堆,直到没有可用的堆内存。Gsoap有些代码没有判断malloc是否成功,直接使用堆指针。导致core

 

 

同时,必须注意的,在以后的编程中,在某个方法中申请了字符数组。一定要在该方法调用memset,如果memset是必须的话。千万不要将数组名做形参,在别的方法中做memset。这样会导致core。即使这样不违反c/c++语法,但是有些编译器或服务器对这个操作上很反感的,直接的报复就是 ----core!!!!

你可能感兴趣的:(编程,服务器,AIX,SOAP,编译器)