diff --git a/dsmin.c b/dsmin.c index 7222508..d4908b4 100644 --- a/dsmin.c +++ b/dsmin.c @@ -16,9 +16,6 @@ int dsmin(double **p,double *y,int n,double ftol,double (*func)(double *)) double *vector_sum(double **,int); double dsmod(double **,double *,double *,int,double (*func)(double *),int,double); - // Allocate memory - psum=(double *) malloc(sizeof(double) * n); - // Get function values for (i=0;i<=n;i++) y[i]=func(p[i]); @@ -69,7 +66,8 @@ int dsmin(double **p,double *y,int n,double ftol,double (*func)(double *)) } } nfunk+=n; - + + free(psum); psum=vector_sum(p,n); } } else --nfunk; diff --git a/rffft.c b/rffft.c index 823e734..37b4fe8 100644 --- a/rffft.c +++ b/rffft.c @@ -344,6 +344,8 @@ int main(int argc,char *argv[]) // Deallocate free(ibuf); + free(cbuf); + free(fbuf); fftwf_free(c); fftwf_free(d); free(z); diff --git a/rffind.c b/rffind.c index db945d1..1fd6daa 100644 --- a/rffind.c +++ b/rffind.c @@ -210,6 +210,9 @@ int main(int argc,char *argv[]) // Filter filter(s,site_id,sigma,filename,graves); + + // Free + free_spectrogram(s); } } else { // Read data @@ -222,14 +225,10 @@ int main(int argc,char *argv[]) // Filter filter(s,site_id,sigma,filename,graves); } - } - // Free - free(s.z); - free(s.mjd); - // free(s.zavg); - // free(s.zstd); - // free(s.length); + // Free + free_spectrogram(s); + } return 0; } diff --git a/rfio.c b/rfio.c index 70205fe..0a33c50 100644 --- a/rfio.c +++ b/rfio.c @@ -238,3 +238,12 @@ void write_spectrogram(struct spectrogram s,char *prefix) return; } + +void free_spectrogram(struct spectrogram s) +{ + free(s.z); + free(s.zavg); + free(s.zstd); + free(s.mjd); + free(s.length); +} diff --git a/rfio.h b/rfio.h index b9b95ab..c332f36 100644 --- a/rfio.h +++ b/rfio.h @@ -9,3 +9,4 @@ struct spectrogram { }; struct spectrogram read_spectrogram(char *prefix,int isub,int nsub,double f0,double df0,int nbin,double foff); void write_spectrogram(struct spectrogram s,char *prefix); +void free_spectrogram(struct spectrogram s); diff --git a/rfplot.c b/rfplot.c index d4f02f7..9ae762e 100644 --- a/rfplot.c +++ b/rfplot.c @@ -722,6 +722,7 @@ int main(int argc,char *argv[]) free(s.zavg); free(s.zstd); free(s.mjd); + free(s.length); if (tf.n>0) { free(tf.mjd); free(tf.freq); diff --git a/rfpng.c b/rfpng.c index 5908605..faf17c0 100644 --- a/rfpng.c +++ b/rfpng.c @@ -254,9 +254,6 @@ int main(int argc,char *argv[]) free(t[i].freq); free(t[i].za); } - // free(tf.mjd); - // free(tf.freq); - // free(tf.za); return 0; } diff --git a/simplex.c b/simplex.c index 68ac169..57b8668 100644 --- a/simplex.c +++ b/simplex.c @@ -26,3 +26,13 @@ double **simplex(int n,double *a,double *da) return p; } +void simplex_free(double **p,int n) +{ + int i; + + if(p==NULL) + return; + for(i=0;i<=n;i++) + free(p[i]); + free(p); +} diff --git a/versafit.c b/versafit.c index 8b49a44..5056962 100644 --- a/versafit.c +++ b/versafit.c @@ -9,6 +9,7 @@ int ERRCOMP=0; // Set reduced Chi-Squared to unity (1 = yes; 0 = no) int dsmin(double **,double *,int,double,double (*func)(double *)); double **simplex(int,double *,double *); +void simplex_free(double **,int); double parabolic_root(double,double,double,double); // Versafit fitting routine @@ -51,6 +52,8 @@ void versafit(int m,int n,double *a,double *da,double (*func)(double *),double d a[i]/=(double) (n+1); } + simplex_free(p,n); + // Compute minimum chisqmin=func(a); @@ -109,6 +112,8 @@ void versafit(int m,int n,double *a,double *da,double (*func)(double *),double d } d[0]=parabolic_root(d[0],func(b),chisqmin,dchisq); + simplex_free(p,n); + if (fabs(chisqmin+dchisq-func(b))