crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Работа с вектором STL
AD
  опции профиля:
сообщение 12.2.2009, 13:22
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Есть такая функция:
struct LOGRECORD
{
         int* param;     ///< массив параметров
         int* words;     ///< массив слов
        LOGRECORD(): param(0), words(0) {}

       /// any functions
};

std::vector<LOGRECORD> getLog() { return log; }

/// Функция в классе другого потока имеет след. строчку
vector<LOGRECORD> log = main_window -> getLog();

При некоторых обстоятельствах программа рушится на этой строке. В дебаггере выпадаю на строки
_DEBUG_ERROR("vector iterators incompatible");
            _SCL_SECURE_INVALID_ARGUMENT;

Есть предложения, как можно этого избежать? По всей видимости, это происходит, когда вектор log пустой, но почему он не дает проверить размер вектора функцией size() - для меня загадка. Буду благодарен за помощь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
kuler
  опции профиля:
сообщение 12.2.2009, 20:23
Сообщение #2


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(AD @ 12.2.2009, 20:12) *
Причем здесь vector<int>?

Я бы порекомендовал в param и words использовать либо vector<int>,
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 13.2.2009, 14:05
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Конкретно эту проблему решил. Поставив мьютекс. Вот так:
// in additional thread
main_window -> mutex.lock();
vector<LOGRECORD> log = main_window -> getLog();
main_window -> mutex.unlock();



// in main thread
const std::vector<LOGRECORD>& getLog() { return log; }

Теперь вопрос, как правильно заполнить. А то ничего не отображается и вектор пустой, почему-то. Но это отдельный вопрос!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.4.2024, 20:16