If it's crashing when you delete, that probably means you have memory corruption. Check your array accesses and make sure you're not stepping out of bounds of any arrays.
For a more hands-on approach, set a breakpoint when you create 'column' and another when you delete it. Make sure the pointer is identical in both places (if it changed, that indicates that memory corruption is mucking up that pointer).
If that turns out to be the problem, step through the code, keeping an eye on that pointer and seeing which line changes it. Then once you know the line that's changing it you can see where the problem is.
Or if you're debugger supports it, you can set a memory breakpoint to break when 'column' changes, then that'll hopefully snap you exactly to the line that's the culprit.
HOW you do all this depends on your debugger/IDE. Though all the ones worth using support the basic functionality required for this:
- step into / step over