gSOAP удаляет ссылочные значения в объектах после завершения запроса - PullRequest
0 голосов
/ 18 мая 2011

я использую gSOAP для запроса информации от веб-службы SOAP

веб-служба soap возвращает объект.я делаю запрос в вызовах с именем: "dataconnector"

в 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);

нет ли более легкого пути?

1 Ответ

1 голос
/ 20 мая 2011

Это не конкретный вопрос 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!
...