It seems to me:
chs_data is an array of float pointers: float *chs_data[IA_CH_COUNT];
- The current code wipes it with
memset(self->chs_data, 0, IA_CH_COUNT * sizeof(float));
- Which means that only half of it is zero-ed out (float being 4 bytes, pointer being 8 for 64-bit systems).
down_mix_channel_data checks chs_data for non-zero pointers:
if (self->chs_data[c]) return self->chs_data[c][i];
- Therefore I'm getting memory errors, trying to read the float array that may have been freed.
It could just be
memset(self->chs_data, 0, sizeof(self->chs_data));
It seems to me:
chs_datais an array of float pointers:float *chs_data[IA_CH_COUNT];memset(self->chs_data, 0, IA_CH_COUNT * sizeof(float));down_mix_channel_datachecks chs_data for non-zero pointers:if (self->chs_data[c]) return self->chs_data[c][i];
It could just be
memset(self->chs_data, 0, sizeof(self->chs_data));