diff -u sympow-1.018.1/analrank.c sympow/analrank.c
--- src/analrank.c	2007-08-21 06:57:01.000000000 +0200
+++ analrank.c	2017-04-24 10:13:45.757479996 +0200
@@ -18,7 +18,8 @@
   S[20]+=2; S[31]+=4; S[42]+=6; S[53]+=8;
   NT=process_string(S,UB); go(NT,NT); return;}
  else {AP_SAVE=1; apsave=malloc(primes_upper_bound(NT)*sizeof(int));}
- if (NT<MIN_TERMS) NT=MIN_TERMS; f=go(NT,NT); free_data();
+ if (NT<MIN_TERMS) NT=MIN_TERMS;
+ f=go(NT,NT); free_data();
  if (Abs(f)/REAL_PERIOD[0]>0.0001)
  {if (w1==1) printf("Analytic Rank is 0 : L-value %.5e\n",f);
   else printf("Analytic Rank is 1 : L'-value %.5e\n",f); return;}
diff -u sympow-1.018.1/prepare.c sympow/prepare.c
--- src/prepare.c	2007-08-21 06:57:01.000000000 +0200
+++ prepare.c	2017-04-24 10:50:10.941042660 +0200
@@ -147,7 +147,7 @@
  WIGGLE=malloc(K*sizeof(QD)); WIGSQI=malloc(K*sizeof(QD));
  EXPAND0_LIM=malloc(K*sizeof(QD)); STEP_SIZE=malloc(K*sizeof(QD));
  TOO_BIG=malloc(K*sizeof(QD)); NUM_LOGS=malloc(K*sizeof(QD));
- TACKON=malloc(K*sizeof(int)); TACKS=malloc(K*sizeof(QD*));
+ TACKON=malloc(K*sizeof(int)); TACKS=calloc(K,sizeof(QD*));
  w=malloc(K*sizeof(int)); wprec=malloc(K*sizeof(int));
  DECAY=malloc(K*sizeof(QD)); NUM_WIGS=malloc(K*sizeof(QD));
  for (i=0;i<K;i++) QD_copy(wmax,QD_zero,COND[i]); WHICH=0; NUM_SUMS=0;
diff -u sympow-1.018.1/util.c sympow/util.c
--- src/util.c	2007-08-21 06:57:01.000000000 +0200
+++ util.c	2017-04-24 10:50:52.013938229 +0200
@@ -23,7 +23,8 @@
  if (DEBUG>=2) printf("Done with get_primes_ll\n"); free(auxp);}
 
 void free_data()
-{QD **P; int i; if (DEBUG) printf("free_data\n"); free(TACKS[0]);
+{QD **P; int i; if (DEBUG) printf("free_data\n");
+ if(TACKS[0]!=NULL) free(TACKS[0]);
  P=TABLE[0]; for (i=0;i<MESH_COUNT[0];i++) free(P[i]); free(P);
  P=POWSER[0]; for (i=0;i<=NUM_LOGS[0];i++) free(P[i]); free(P);}
 
