Fixed some memory leaks.

pull/16/head
Mario Haustein 2020-05-21 17:50:09 +02:00
parent 03c10f5141
commit 14f3386b0a
9 changed files with 42 additions and 18 deletions

View File

@ -16,9 +16,6 @@ int dsmin(double **p,double *y,int n,double ftol,double (*func)(double *))
double *vector_sum(double **,int); double *vector_sum(double **,int);
double dsmod(double **,double *,double *,int,double (*func)(double *),int,double); double dsmod(double **,double *,double *,int,double (*func)(double *),int,double);
// Allocate memory
psum=(double *) malloc(sizeof(double) * n);
// Get function values // Get function values
for (i=0;i<=n;i++) for (i=0;i<=n;i++)
y[i]=func(p[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; nfunk+=n;
free(psum);
psum=vector_sum(p,n); psum=vector_sum(p,n);
} }
} else --nfunk; } else --nfunk;

View File

@ -344,6 +344,8 @@ int main(int argc,char *argv[])
// Deallocate // Deallocate
free(ibuf); free(ibuf);
free(cbuf);
free(fbuf);
fftwf_free(c); fftwf_free(c);
fftwf_free(d); fftwf_free(d);
free(z); free(z);

View File

@ -210,6 +210,9 @@ int main(int argc,char *argv[])
// Filter // Filter
filter(s,site_id,sigma,filename,graves); filter(s,site_id,sigma,filename,graves);
// Free
free_spectrogram(s);
} }
} else { } else {
// Read data // Read data
@ -222,14 +225,10 @@ int main(int argc,char *argv[])
// Filter // Filter
filter(s,site_id,sigma,filename,graves); filter(s,site_id,sigma,filename,graves);
} }
}
// Free // Free
free(s.z); free_spectrogram(s);
free(s.mjd); }
// free(s.zavg);
// free(s.zstd);
// free(s.length);
return 0; return 0;
} }

9
rfio.c
View File

@ -238,3 +238,12 @@ void write_spectrogram(struct spectrogram s,char *prefix)
return; return;
} }
void free_spectrogram(struct spectrogram s)
{
free(s.z);
free(s.zavg);
free(s.zstd);
free(s.mjd);
free(s.length);
}

1
rfio.h
View File

@ -9,3 +9,4 @@ struct spectrogram {
}; };
struct spectrogram read_spectrogram(char *prefix,int isub,int nsub,double f0,double df0,int nbin,double foff); 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 write_spectrogram(struct spectrogram s,char *prefix);
void free_spectrogram(struct spectrogram s);

View File

@ -722,6 +722,7 @@ int main(int argc,char *argv[])
free(s.zavg); free(s.zavg);
free(s.zstd); free(s.zstd);
free(s.mjd); free(s.mjd);
free(s.length);
if (tf.n>0) { if (tf.n>0) {
free(tf.mjd); free(tf.mjd);
free(tf.freq); free(tf.freq);

View File

@ -254,9 +254,6 @@ int main(int argc,char *argv[])
free(t[i].freq); free(t[i].freq);
free(t[i].za); free(t[i].za);
} }
// free(tf.mjd);
// free(tf.freq);
// free(tf.za);
return 0; return 0;
} }

View File

@ -26,3 +26,13 @@ double **simplex(int n,double *a,double *da)
return p; 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);
}

View File

@ -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 *)); int dsmin(double **,double *,int,double,double (*func)(double *));
double **simplex(int,double *,double *); double **simplex(int,double *,double *);
void simplex_free(double **,int);
double parabolic_root(double,double,double,double); double parabolic_root(double,double,double,double);
// Versafit fitting routine // 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); a[i]/=(double) (n+1);
} }
simplex_free(p,n);
// Compute minimum // Compute minimum
chisqmin=func(a); 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); d[0]=parabolic_root(d[0],func(b),chisqmin,dchisq);
simplex_free(p,n);
if (fabs(chisqmin+dchisq-func(b))<tol) break; if (fabs(chisqmin+dchisq-func(b))<tol) break;
} }
@ -131,6 +136,8 @@ void versafit(int m,int n,double *a,double *da,double (*func)(double *),double d
} }
d[1]=parabolic_root(d[1],func(b),chisqmin,dchisq); d[1]=parabolic_root(d[1],func(b),chisqmin,dchisq);
simplex_free(p,n);
if (fabs(chisqmin+dchisq-func(b))<tol) break; if (fabs(chisqmin+dchisq-func(b))<tol) break;
} }
da[i]=0.5*(fabs(d[0])+fabs(d[1])); da[i]=0.5*(fabs(d[0])+fabs(d[1]));
@ -138,16 +145,16 @@ void versafit(int m,int n,double *a,double *da,double (*func)(double *),double d
} }
} }
free(b);
free(db);
if (OUTPUT) if (OUTPUT)
for (i=0;i<n;i++) for (i=0;i<n;i++)
printf(" a(%i): %12.5f +- %9.5f\n",i+1,a[i],da[i]); printf(" a(%i): %12.5f +- %9.5f\n",i+1,a[i],da[i]);
} }
if (OUTPUT) printf("\nTotal number of iterations: %i\n",nfunk); if (OUTPUT) printf("\nTotal number of iterations: %i\n",nfunk);
// free(p); free(y);
// free(y);
// free(b);
// free(db);
return; return;
} }