Buenas:
Tengo un std::map con información sobre unos dispositivos que van dandose de alta a tiempos aleatorios.
el mapa es
std::map<int,AGKDEVICE *> Devices;
cuando recibo una petición de alta de un device:
if (Msg->GetTypeMsg()==TYPEMSG_PRESENCE)
{
if (AGKINSTALLATION::Get()->GetDevice(id)==NULL) //no esta dado de alta
{
time_t t=time(0);
AGKDEVICE * D=new AGKDEVICE();
Traza=D;
D->SetTime (t);
D->SetID (id);
AGKINSTALLATION::Get()->AddDevice(D);
}
}
Agkinstallation solo es el mapa y AddDevice solo hace
AGKINSTALLATION::AddDevice(D)
{ Devices[D->GetID()]=D; }
hasta aqui yo creo que todo bien.
ahora , quiero iterar todos los devices que me han llegado hasta ahora para ver a que hora llegaron:
AGKINSTALLATION * I=AGKINSTALLATION::Get();
if (I->GetDevices().size()>0)
{
std::map<int,AGKDEVICE*>Map=I->GetDevices();
std::map<int,AGKDEVICE*>::iterator it;
for(it = I->GetDevices().begin(); it != I->GetDevices().end(); ++it)
{
AGKDEVICE* D=it->second;
if (D->IsDisabled()) continue; <<< EXCEPCION!!! D es NULO!
if (t>(time_t)(D->GetTime()+Elapse)) //timeout!
{
...
}
}
}
El problema me llega al iterar, el iterador lleva un Device Nulo cuando it = begin().
Debugeando , veo que en el Mapa esta bien insertado el Device.
Yo sospecho que el std::map pueda estar mal iterado, alguien sabe si es eso, y si lo es , como deberia hacer la iteración?
en Google siempre empiezan a iterar por Find, pero yo no se cuales estan dados de alta en el momento del checkeo.
Otra cosa, yo creia que en la adición del for debia ponerse it++ , sin embargo he visto en ejemplos del google que lo preincrementan. Por que es esto?
Muchas gracias.