deque fehler abfangen?
-
hi,
wenn ich ein 'deque.push_front(x)' mache, kann es doch sein, dass kein speicher mehr da ist. muss man da 'ne exception abfangen oder wie funzt das?
-
eine problem wegen fehlendem speicher kann bei jedem container in einer funktion, die potentiell speicher anfordert, auftreten. in diesem falle wird stets eine exception vom typ std::bad_alloc (oder einer davon public abgeleiteten klasse) geworfen (geaugenommen hängt das konkrete verhalten vom verwendeten allocator ab, aber zumindest der standard-allocator verhält sich so). in der regel hat es allerdings keinen sinn, einen derartigen fehler lokal zu behandeln. es darf allerdings grundsätzlich keine exception die main-funktion verlassen - ein allgemeiner handler mit ellipse kann dort also angebracht sein.
-
ok, danke, hatte mir schon sowas ähnliches gedacht

ich hatte es bis jetzt so, werd's wohl so lassen:int MTQueue::Write (unsigned char b) { volatile int result; EnterCriticalSection (&m_crit); try { m_queue.push_front(b); result = 1; // OK } catch (...) { result = -1; // FUCK } LeaveCriticalSection (&m_crit); return result; }
-
net schrieb:
ok, danke, hatte mir schon sowas ähnliches gedacht

ich hatte es bis jetzt so, werd's wohl so lassen:int MTQueue::Write (unsigned char b) { volatile int result; EnterCriticalSection (&m_crit); try { m_queue.push_front(b); result = 1; // OK } catch (...) { result = -1; // FUCK } LeaveCriticalSection (&m_crit); return result; }hm, wieso nicht einfach in der main, so wie's camper geschrieben hat? Jetzt arbeitest du ja doch lokal auf dem Problem...
MfG
GPC
-
GPC schrieb:
hm, wieso nicht einfach in der main, so wie's camper geschrieben hat? Jetzt arbeitest du ja doch lokal auf dem Problem...
am anderen ende der queue saugt ein thread die daten raus. wenn wieder platz ist, möchte ich den schreibvorgang wiederholen. ist eh' nur ein sicherheitscheck. es wird wohl nie vorkommen, das die queue so voll wird...