N
Es ist wahrscheinlich, dass du irgendein Problem mit Zeigern hast. Das kann nämlich schnell passieren und fatale Auswirkungen haben. Sehr schlimm wird es, wenn das Verhalten bei jedem Programmdurchlauf ein wenig anders ist...
Die Problematik dabei ist auch, dass man Fehler schwer eingrenzen kann. Wie bei deinem closedir() -Aufruf - gut möglich, dass schon sehr viel früher etwas falsch gelaufen ist, das sich aber erst dort bemerkbar macht. Auch fehlerhaft allozierter oder beschädigter Speicher macht oft erst Probleme beim Freigeben (z.B. durch Heap Corruptions).
Ich würde an deiner Stelle versuchen, die Stellen, wo du "frickelig" - also relativ maschinennah und riskant - arbeitest, genauer zu untersuchen. Wenn du viele derer Stellen hast, wird das sehr schnell mühsam, und da lohnt sich ein Neu-Schreiben eher. Wie von drakon angetönt solltest du versuchen, auf höherer Abstraktionsebene zu arbeiten, also Smart Pointer statt rohen Zeigern und Container statt new und delete einzusetzen. Damit kannst du schon mal sehr viel eingrenzen, durch Assertions werden zum Beispiel allfällige Fehler noch viel besser mitgeteilt.