В настоящее время я реализую webservice с использованием gsoap версии 2.8 и работает с ошибками сегментации.Назначить значение std :: string pointer, созданный с помощью soap_malloc
Therefor выделяю память с помощью soap_malloc так:
OSoap *myObject = (OSoap *)soap_new_OSoap(this);
myObject->myString = (std::string*)soap_malloc(this, sizeof(std::string));
Исходный код OSoap генерируется с использованием WSDL и выглядит следующим образом:
class SOAP_CMAC OSoap {
...
public:
std::string *myString; // optional attribute
...
}
Теперь я строка выделена, но как я пишу содержимое этой строки?
myObject->myString->insert(0, "123");
и
*(myObject->myString) += "abc";
приводят к сегментации ошибок.
std::string *abc = new std::string("abc");
myObject->myString = abc;
работает, но производит утечку памяти, которую я стараюсь избегать.
Поиск Google или StackOverflow для того, как скопировать строку в C++ не дала мне подсказку, как решить эту проблему с помощью станда :: Струнных указателей
Я не знаю gSoap, но мне приходит в голову, что вы назначаете std :: string (в фиксированном распределении памяти), а затем вставляете/добавляете во внутреннюю память строки. Когда вы вводите новую строку, вы полностью контролируете объект, и он работает (но течет) - может экспериментировать с массивами char с фиксированным размером и посмотреть, будет ли тогда soap_malloc? (Копия I.E. в массив) – Caribou
фиксированный массив символов не работал, потому что мне нужно было бы инициировать их с помощью {}, char *. –
ok - Я думаю, что возможно, что ошибка seg вызвана перераспределением внутренней памяти. Надеюсь, это поможет вам немного дальше. Извините, я не могу больше помочь. – Caribou