0

我正在使用 gSOAP 从 SOAP Web 服务请求信息

肥皂网络服务返回一个对象。我在名为“dataconnector”的调用中执行请求

在数据连接器中,我可以输出返回对象的所有值,但除此之外,对象中的所有引用值都是空的。

我做了一些搜索,显然 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);

没有更简单的方法吗?

4

1 回答 1

1

这不是特定的 gSOAP 或 Web 服务问题。当变量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!
于 2011-05-19T20:47:24.903 回答