C++ 为使用soap\u malloc创建的std::字符串指针赋值
我目前正在使用gsoap版本2.8实现一个Web服务,并且遇到了分段错误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
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!