Simple FFT convolution with impulse response wav file doesn't give the right results
Your code performs the circular convolution.
Circ Convolution gives an array equal to max( len(a) , len(b) )
Convolution will return an array of length = len(a) + len(b) - 1 // a, b > 0
If you think about it, adding a reverb makes a sound longer. That's the equation ^^ that describes by how much. What you're hearing is the end of the reverb played over the start.
Keep in mind in a musical setting, often the original sound is mixed in with the reverb sound.

I zero padding your data before FFTing it.

long bufSize = 1024*62;
for(int i=bufSize; i&lt;2*bufSize; ++i) res[i].mRe = res[i].mIm = res_ir[i].mRe = res_ir[i].mIm = 0;
mFFT-&gt;runFFT(res, bufSize);
mFFT-&gt;runFFT(res_ir, bufSize);

double a=0;
double b=0;
double c=0;
double d=0;
for (int i=0;i&lt;bufSize*2;i++)
{
    a=res[i].re();
    b=res[i].im();
    c=res_ir[i].re();
    d=res_ir[i].im();

    res[i].mRe = (a*c - b*d) * (gain);
    res[i].mIm = 0;
}


That gets rid of the 'wrapping' effect of circular convolution at least.
Also, the imaginary part is zero because the convolution of two real signals is real.