Создайте вектор строк совместно используемой памяти

Я пытаюсь создать класс, управляющий вектором с общей памятью (std) строк.

typedef boost::interprocess::allocator<std::string, boost::interprocess::managed_shared_memory::segment_manager> shmem_allocator;
typedef boost::interprocess::vector<std::string, shmem_allocator> shmem_vector;

shmem_mgr::shmem_mgr() :
    shmem_(create_only, SHMEM_KEY, SHMEM_SIZE),
    allocator_(shmem_.get_segment_manager())
{
    mutex_  = shmem_.find_or_construct<interprocess_mutex>(SHMEM_MUTEX)();
    condition_ = shmem_.find_or_construct<interprocess_condition>(SHMEM_CONDITION)();
    //buffer_ is of type shmem_vector
    buffer_  = shmem_.construct<shmem_vector>(SHMEM_BUFFER_KEY)(allocator_);
}

void shmem_mgr::run() {
    running_ = true;

    while(running_) {
        scoped_lock<interprocess_mutex> lock ( *mutex_ );

        int size = buffer_->size();

        log_.debug() << size << " queued request(s) found" << std::endl; //LINE 27
        for(int i=0; i<size; i++) {
            log_.debug() << buffer_->at(i); // at() crashes my app
        }

        buffer_->clear(); //so does clear()
        condition_->wait (lock);
    }
}

Клиент успешно добавляет строку в вектор (он также успешно читает эту строку из буфера для отладки), менеджер (код выше) получает сигнал (переменная условия), пишет, что в векторе есть строка (строка 27 ), но когда он пытается получить эту строку черезat() приложение вылетает.

Редактировать: Я понял, что использованиеstd::string не возможно, естьstring Контейнер в Boost IPC только для этого случая. Это не меняет того факта, что мне нужен вектор (boost / std) строк ...

Q: Как я могу передать строки через общую память? Мне нужно хранить их в каком-то буфере (способном хранить> 1 за раз) в shmem, а затем извлекать во втором процессе - это требование. Вход всегдаstd::string как и вывод, но внутреннее представление в shmem может быть другим.

Ответы на вопрос(3)

Ваш ответ на вопрос