Dunque mettendo:
a = (double *).realloc(a, (i+1)*sizeof(double)); (lo stesso per b)
si dovrebbe risolvere il problema.
Però in questo modo non riempirei una cella dell'area in più? Il cui valore chiaramente é 0