[ http://issues.apache.org/jira/browse/AXISCPP-343?page=comments#action_12330942 ]
Unai Uribarri commented on AXISCPP-343: --------------------------------------- When the arrays is full, the size is doubled and and new memory is allocated. The old array (with is size/2) is copied to the new array and zero-ed to try to prevent calling the destructors of these objects. Unfortunately, this doesn't work with virtual destructors. Just removing the delete[] call will leak memory. The correct way is to use the same mechanism that the STL uses, or just using a std::vector. > SIGSEGV deserializing an array of complex elements > -------------------------------------------------- > > Key: AXISCPP-343 > URL: http://issues.apache.org/jira/browse/AXISCPP-343 > Project: Axis-C++ > Type: Bug > Components: Serialization > Versions: 1.4 Final > Environment: RH9 > Reporter: Unai Uribarri > Assignee: Dushshantha Chandradasa > Attachments: siaam.wsdl > > The function Axis_Create_* (in the following example, the mapItem > object) in the stubs generated by wsdl2ws java tool generates a SIGSEGV > when tring to enlarge an array of objects > mapItem* pNew = new mapItem[nSize]; > memcpy(pNew, pObj, sizeof(mapItem)*nSize/2); > memset(pObj, 0, sizeof(mapItem)*nSize/2); > --> delete [] pObj; <-- SIGSEGV > memset clears the virtual table pointer of the mapItem objects and the delete > operator crash. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
