Ошибка сегментации при использовании строки в структуре

Таблица в моей базе данных имеет один столбец типа BLOB-объектов. Я использую его для хранения следующей структуры:

struct a
{
int x;
string y;
} ;

Я написал функцию C ++ для извлечения этого большого двоичного объекта с использованием переменной структуры, упомянутой выше. Для этого я использую функцию cass_value_get_bytes.

Проблема в том, что я получаю ошибку сегментации, если я использую вышеупомянутую структуру. Однако, если я изменю тип строки на массив символов, проблема решится.
Я не могу понять, почему я не могу использовать строковую переменную, так как намного лучше использовать строку, чем массив символов.

0

Решение

Функции cass_value_get_string() а также cass_value_get_bytes() вернуть указатель в буфер, время жизни которого связано с CassResult, Когда результат удаляется, так же как и память значений. Вам необходимо скопировать память в буфер строки. cass_value_get_string() может также использоваться для блобов, и это позволяет избежать необходимости делать reinterpret_cast<>, Вы можете сделать что-то вроде следующего:

#include <cassandra.h>
#include <string>

std::string to_string(CassValue* value) {
const char* str;
size_t len;
cass_value_get_string(value, &str, &len);
return std::string(str, len);
}

struct SomeData {
int x;
std::string y;
};

int main() {
SomeData data;
CassValue* value = NULL; /* This needs to be set from the result */
data.y = to_string(value);
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector