But how can we explain:
The already-working code became not working but later worked again, even I didn't change anything in the code.
In many ways...
- The easiest: Some of the new code writes to memory it does not own (dangling pointer, out of range, etc). And it happens to write to memory belonging to your existing code.
- Or the other way round: The existing code already accesses not-owned memory. It got lucky sofar, that the values were always ok (maybe memory was not cleaned, and the dangling pointer got a result). Now that memory is re-used. Or it is just that the overall memory layout changed....
- In threaded apps: changes to timing. Pre-existing race conditions, may become thousand times more likely to trigger.
- Unexpected messages send to the main event loop (unlikely, but how knows). Or somehow retrieved from the event queue, and never reaching the main loop.
- FPU exceptions are left behind, and trigger when existing code accesses the fpu.
- total resource usage hits a limit
- Depending on OS: conflicting calls, making global changes... (not sure, if that can happen...)