C++ 为使用soap\u malloc创建的std::字符串指针赋值

C++ 为使用soap\u malloc创建的std::字符串指针赋值,c++,std,gsoap,C++,Std,Gsoap,我目前正在使用gsoap版本2.8实现一个Web服务,并且遇到了分段错误 std::string *abc = new std::string("abc"); myObject->myString = abc; 因此,我使用soap\u malloc分配内存,如下所示: OSoap *myObject = (OSoap *)soap_new_OSoap(this); myObject->myString = (std::string*)soap_malloc(this, sizeo

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

std::string *abc = new std::string("abc");
myObject->myString = abc;
因此,我使用soap\u malloc分配内存,如下所示:

OSoap *myObject = (OSoap *)soap_new_OSoap(this);
myObject->myString = (std::string*)soap_malloc(this, sizeof(std::string));
class SOAP_CMAC OSoap {
...
public:
   std::string *myString; // optional attribute
...
}
OSoap的源代码是使用wsdl生成的,如下所示:

OSoap *myObject = (OSoap *)soap_new_OSoap(this);
myObject->myString = (std::string*)soap_malloc(this, sizeof(std::string));
class SOAP_CMAC OSoap {
...
public:
   std::string *myString; // optional attribute
...
}
现在我分配了一个字符串,但是如何将内容写入该字符串

myObject->myString->insert(0, "123");

导致分割错误

std::string *abc = new std::string("abc");
myObject->myString = abc;
可以工作,但会产生内存泄漏,我会尽量避免


< >搜索谷歌或StasOp溢出,如何在C++中复制字符串,但没有提示如何使用STD::String指针< /P> < P> OK——当使用STD::String *时,应该使用<代码> SoPasStimeAtdioStdYStrys<代码>,而不是在文档中找不到的<代码> SOAPMMALC/<代码>,那么一切都很好!p> 确定-当使用std::string*时,应该使用
soap\u instantiate\u std\u string
而不是我在文档中没有找到的
soap\u malloc
,然后一切正常

我也有同样的问题。我看到std::string*是一个“可选”属性。 在我写完之后:

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

它在标题中更改为std::字符串!
我不知道您是否使用xsd元素,但这是一种很好的方法。

我也有同样的问题。我看到std::string*是一个“可选”属性。 在我写完之后:

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

它在标题中更改为std::字符串!
我不知道您是否使用xsd元素,但这是一种很好的方法。

复杂类型可以通过使用
soap\u new\u XXX
函数进行实例化,在本例中,类似于
soap\u new\u std\u string(soap,1)
。此函数在内部调用
soap\u instantiate\u std\u string
。内存将由gsoap自动释放


请参阅第9.13.1章内存分配和管理策略。

复杂类型可以通过使用
soap\u new\u XXX
函数进行实例化,在这种情况下,如
soap\u new\u std\u string(soap,1)
。此函数在内部调用
soap\u instantiate\u std\u string
。内存将由gsoap自动释放


请参阅第9.13.1章内存分配和管理策略。

我不知道gSoap,但我发现您正在分配std::字符串(在固定内存分配中),然后插入/追加到字符串的内部内存。当你重新创建字符串时,你完全控制了对象,它可以工作(但会泄漏)——你能用固定大小的字符数组进行实验,看看soap\u malloc是否可以工作吗?(即复制到数组中)固定大小的char数组不起作用,因为我需要将它们与{}实例化,char*确实起作用。ok-我认为seg错误可能是由于字符串在内部重新分配内存。希望这能让你更进一步。很抱歉,我帮不上什么忙。我不知道gSoap,但我突然想到,您正在分配std::string(在固定内存分配中),然后插入/追加到字符串的内部内存中。当你重新创建字符串时,你完全控制了对象,它可以工作(但会泄漏)——你能用固定大小的字符数组进行实验,看看soap\u malloc是否可以工作吗?(即复制到数组中)固定大小的char数组不起作用,因为我需要将它们与{}实例化,char*确实起作用。ok-我认为seg错误可能是由于字符串在内部重新分配内存。希望这能让你更进一步。对不起,我帮不上忙了。在我的情况下,不允许更改xsd!在我的情况下,不允许更改xsd!