将值赋给使用soap_malloc创建的std :: string指针

时间:2013-06-24 13:36:40

标签: c++ std gsoap

我目前正在使用gsoap版本2.8实现一个Web服务并遇到分段错误。

因此我使用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;

工作但产生内存泄漏,我试图避免。

搜索google或stackoverflow以了解如何在c ++中复制字符串并没有给我一个提示如何使用std :: string指针解决问题

3 个答案:

答案 0 :(得分:3)

好的 - 当使用std :: string *时,我应该使用soap_instantiate_std__string而不是文档中没有找到的soap_malloc,那么一切正常!

答案 1 :(得分:2)

我遇到了同样的问题。我看到你的std :: string *是一个"可选"属性。 在我写完后:

<xsd:element minOccurs="1" maxOccurs="1" name="myString" type="xsd:string"/>

它在标题中更改为std :: string! 我不知道你是否使用了xsd元素,但这种方法效果很好。

答案 2 :(得分:0)

复杂类型可以使用soap_new_XXX函数进行实例化,例如soap_new_std__string(soap, 1)。此函数在内部调用soap_instantiate_std__string。记忆将由gsoap自动发布。

参见gsoap documentation章节9.13.1内存分配和管理策略。