I understand that a reproducible example helps to improve our conversation
If you are manually constructing the callbacks, there are a lot of things that can go wrong. It’s hard to say more without code. A segfault usually means that you did something wrong in the callback. Did you compute the correct number of non-zeros? Does the structure of your non-zeros remain constant over the iterations? Did you fill them in in the correct order?
By the way, when I use JuMP + Ipopt, the optimization stops as it converges to an infeasible point.
If you know the problem has a feasible solution, that usually means your starting point was far from feasibility. Try passing a feasible starting point. You can use set_start_value(x, value) in JuMP to set the starting point.