diff options
-rw-r--r-- | gr-filter/lib/pm_remez.cc | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/gr-filter/lib/pm_remez.cc b/gr-filter/lib/pm_remez.cc index 24891f1795..c23095af25 100644 --- a/gr-filter/lib/pm_remez.cc +++ b/gr-filter/lib/pm_remez.cc @@ -376,8 +376,10 @@ namespace gr { if(((E[i] >= E[i-1]) && (E[i] > E[i+1]) && (E[i] > 0.0)) || ((E[i] <= E[i-1]) && (E[i] < E[i+1]) && (E[i] < 0.0))) { // PAK: we sometimes get too many extremal frequencies - if(k >= 2*r) + if(k >= 2*r) { + free(foundExt); return -3; + } foundExt[k++] = i; } } @@ -388,14 +390,18 @@ namespace gr { j = gridsize-1; if(((E[j] > 0.0) && (E[j] > E[j-1])) || ((E[j] < 0.0) && (E[j] < E[j-1]))) { - if(k >= 2*r) + if(k >= 2*r) { + free(foundExt); return -3; + } foundExt[k++] = j; } // PAK: we sometimes get not enough extremal frequencies - if(k < r+1) + if(k < r+1) { + free(foundExt); return -2; + } /* * Remove extra extremals @@ -688,8 +694,18 @@ namespace gr { calc_parms(r, Ext, Grid, D, W, ad, x, y); calc_error(r, ad, x, y, gridsize, Grid, D, W, E); int err = search(r, Ext, gridsize, E); - if(err) + if(err) { + free(Grid); + free(W); + free(D); + free(E); + free(Ext); + free(taps); + free(x); + free(y); + free(ad); return err; + } for(int i = 0; i <= r; i++) assert(Ext[i] < gridsize); if(is_done(r, Ext, E)) @@ -732,6 +748,7 @@ namespace gr { free(D); free(E); free(Ext); + free(taps); free(x); free(y); free(ad); |