我正在使用gSOAP从SOAP Web服务
请求信息soap webservice返回一个对象。 我在一个叫做“dataconnector”
的电话中做了请求在dataconnector中我可以输出返回对象的所有值 但在外面,对象中的所有引用值都为null。
我做了一些搜索,并且显然gSOAP会删除所有内容,除非您使用soap_unlink()从解除分配链中删除
我试过但它没有帮助 这是我的代码
我做错了什么想法?
QList<ns1__calls*> calls;
datacheckPortBindingProxy service;
ns1__getCalls request;
std::string un("4444");
request.username = &un;
ns1__getCallsResponse response;
if (service.getCalls(&request, &response) == SOAP_OK){
qDebug() << "succesfull response";
for(unsigned int i = 0; i< response.return_.size(); i++){
ns1__calls* call = response.return_.at(i);
qDebug() << QString(call->roomId->c_str());
qDebug() << " with type_id: " << (call->typeId-1) ;
calls.append(call);
soap_unlink(request.soap, call);
}
修改
NVM 显然你需要取消链接对象的所有单独值
像这样:soap_unlink(response.soap, call->roomId);
soap_unlink(response.soap, call->display);
soap_unlink(response.soap, call->location);
soap_unlink(response.soap, call->staffAidId);
soap_unlink(response.soap, call->firstName);
soap_unlink(response.soap, call->lastName);
是不是有一种更好的方式?
答案 0 :(得分:1)
这不是特定的gSOAP或网络服务问题。当变量response
超出范围时,它会释放它使用的内存,在我看来,你应该取消链接 gSOAP保留的内存。如果你取消链接,你有责任解放它!
要做的就是复制ns1__calls
指针引用的对象。
QList<ns1__calls> calls; // QList of instances instead of pointers
...
calls.append(*call); // append a copy
// soap_unlink(request.soap,call); // not needed!