我目前正在使用gsoap版本2.8實現webservice並運行到分段錯誤。將值賦給使用soap_malloc創建的std :: string指針
爲此我使用soap_malloc這樣的分配內存:
OSoap *myObject = (OSoap *)soap_new_OSoap(this);
myObject->myString = (std::string*)soap_malloc(this, sizeof(std::string));
使用WSDL生成OSoap的源代碼,看起來像這樣:
class SOAP_CMAC OSoap {
...
public:
std::string *myString; // optional attribute
...
}
現在我有一個字符串分配但如何我寫內容給這個字符串?
myObject->myString->insert(0, "123");
和
*(myObject->myString) += "abc";
導致段故障。
std::string *abc = new std::string("abc");
myObject->myString = abc;
工作,但產生內存泄漏,我儘量避免。
搜索谷歌或爲計算器如何複製在C++字符串沒有給我一個提示如何使用的std :: string指針
我不知道gSoap,但是在我看來,您正在分配std :: string(在固定的內存分配中),然後插入/附加到字符串的內部內存。當你新建字符串時,你完全控制了對象,它可以工作(但泄漏) - 你可以試驗固定大小的字符數組,然後看看soap_malloc是什麼? (I.E.複製到數組中) – Caribou
固定大小的char數組無效,因爲我需要使用{}對它們進行實例化,char *確實有效。 –
好的 - 我認爲seg故障可能是由於字符串在內部重新分配內存引起的。希望這會讓你更進一步。對不起,我無法提供更多幫助。 – Caribou