метод begin() у map возвращает NULL!!!
От: AlexeyV Россия  
Дата: 17.11.06 15:16
Оценка:
Здраствуйте!
Подскажите пожалуйста — в каком случае метод begin() может возвращать итератор с node == NULL?
std::map<TDateTime, int> m;

// заполнение данными
// ...
//

std::map<TDateTime, int>::iterator i = m.begin();
while ( i != m.end() )
{
   // 
   // что-то делаем
   //
   ++i;
}

так вот при первом выполнении строки с while выпадаем по эксепшену AccessViolation. Если под дебагером посмотреть итератор перед выполнением while, то он содержит NULL. При этом в мапе порядка 12 записей!
Re: метод begin() у map возвращает NULL!!!
От: Sergey Россия  
Дата: 17.11.06 15:24
Оценка:
> Подскажите пожалуйста — в каком случае метод begin() может возвращать итератор с node == NULL?
>
> std::map<TDateTime, int> m;
> 
> // заполнение данными
> // ...
> //
> 
> std::map<TDateTime, int>::iterator i = m.begin();
> while ( i != m.end() )
> {
>   // 
>   // что-то делаем
>   //
>   ++i;
> }
>

> так вот при первом выполнении строки с while выпадаем по эксепшену AccessViolation. Если под дебагером посмотреть итератор перед выполнением while, то он содержит NULL. При этом в мапе порядка 12 записей!

Такое может быть, если оператор < для класса TDateTime не удовлетворяет условию strict weak ordering. Соответствеено, выкладывайте код этого оператора.
Posted via RSDN NNTP Server 2.0
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re: метод begin() у map возвращает NULL!!!
От: genre Россия  
Дата: 17.11.06 15:33
Оценка:
Здравствуйте, AlexeyV, Вы писали:

AV>Здраствуйте!

AV>Подскажите пожалуйста — в каком случае метод begin() может возвращать итератор с node == NULL?
AV>

AV>std::map<TDateTime, int>::iterator i = m.begin();
ну например если здесь другой поток твой мап поиспользовал как-то
AV>while ( i != m.end() )
AV>{
AV>}
AV>

AV>так вот при первом выполнении строки с while выпадаем по эксепшену AccessViolation. Если под дебагером посмотреть итератор перед выполнением while, то он содержит NULL. При этом в мапе порядка 12 записей!
... << RSDN@Home 1.2.0 alpha rev. 0>>
Re: метод begin() у map возвращает NULL!!!
От: Андрей Тарасевич Беларусь  
Дата: 17.11.06 15:35
Оценка:
Здравствуйте, AlexeyV, Вы писали:

AV>так вот при первом выполнении строки с while выпадаем по эксепшену AccessViolation. Если под дебагером посмотреть итератор перед выполнением while, то он содержит NULL. При этом в мапе порядка 12 записей!


"Убитый", скорее всего, какой-то мап получился. Неправильный. И ожидать от него можно чего угодно. Но из приведенного кода этого не видно.
Best regards,
Андрей Тарасевич
Re[2]: метод begin() у map возвращает NULL!!!
От: AlexeyV Россия  
Дата: 17.11.06 15:45
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Такое может быть, если оператор < для класса TDateTime не удовлетворяет условию strict weak ordering. Соответствеено, выкладывайте код этого оператора.


TDateTime — это класс C++ Builder-а для представления даты-времени:
class RTL_DELPHIRETURN TDateTimeBase
{
public:
  double Val;
};

class RTL_DELPHIRETURN TDateTime : public TDateTimeBase
{
public:
// множество методов

      bool __fastcall operator <(const TDateTime& rhs) const
      {return Val < rhs.Val;}
};
Re: метод begin() у map возвращает NULL!!!
От: ArtDenis Россия  
Дата: 18.11.06 09:40
Оценка:
AlexeyV пишет:
> ...
> так вот при первом выполнении строки с while выпадаем по эксепшену
> AccessViolation. Если под дебагером посмотреть итератор перед
> выполнением while, то он содержит NULL.

У тебя ошибка в другом месте кода
Posted via RSDN NNTP Server 2.0
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.