Debugging in Ipopt without JuMP

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.