How to use Octave ellip() coefficients for 3-band C++ crossover
Not sure what your application requirements are but there seem to be some issues with your implementation.

Your pass band ripple of 5 dB is way too big. Something like 0.1dB would be much more typical
Elliptic filters are poor choice for cross overs. The create significant phase distortions in the cross over region that you can easily see if you sum your three bands. The sum is nowhere near &quot;flat&quot;. Better choice would be a Butterworth filter for odd order (using the proper sign) or Linkwitz-Riley for even orders.
It also looks like you are trying to build a 3-band equalizer, not a cross-over. If that's the case the whole approach is wrong .
Your filter is WAY to steep which creates an enormous amount of time domain ringing. Your low-pass filter rings for more than 100 milliseconds.
Try to stay away from $[num,den]$ representation of filters. Use $[z,p,k]$ or $sos$ instead.
Implement filters as cascaded biquads. It's easy to do and there are dozens of code examples on the internet
Do NOT use &quot;Direct Form II&quot;. That's pretty much the worst for audio processing. Use Direct Form I or Transposed Form II instead.

A quick explanation for the last three bullets. In audio processing, the poles of the filters are often extremely close to the unit circle. It's easy to get the transfer function coefficients from the poles and zeros, but the other direction is numerically difficult since it requires finding the roots of a polynomial where the roots are very close together.
In evaluating different filter topology it is useful to look at the transfer function from the input (or output) to the state variables. For Direct Form II (and transposed Form I) this is given by the pole-only transfer function, which can get extremely large (in audio). Even your seemingly harmless low pass at 159 Hz has a pole-only gain of a whopping 94 dB. That means that your state variables are 10000 larger than your input/output.