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 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;

View File

@ -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);

View File

@ -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;
}

9
rfio.c
View File

@ -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);
}

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);
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.zstd);
free(s.mjd);
free(s.length);
if (tf.n>0) {
free(tf.mjd);
free(tf.freq);

View File

@ -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;
}

View File

@ -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);
}

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 *));
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))<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);
simplex_free(p,n);
if (fabs(chisqmin+dchisq-func(b))<tol) break;
}
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)
for (i=0;i<n;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);
// free(p);
// free(y);
// free(b);
// free(db);
free(y);
return;
}