1. 程式人生 > >關於gsoap調用出現 soap_malloc失敗出現coredump的解決

關於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!!!!