Changeset d2d22f in git


Ignore:
Timestamp:
Feb 24, 2005, 5:26:18 PM (19 years ago)
Author:
Michael Brickenstein <bricken@…>
Branches:
(u'spielwiese', '17f1d200f27c5bd38f5dfc6e8a0879242279d1d8')
Children:
9bea6ef004ce1d30a0df5771578cee93e449259d
Parents:
040ee808c6d9e77d6f896824154bf12c65cd0d97
Message:
*bricken: fixed memory leaks


git-svn-id: file:///usr/local/Singular/svn/trunk@7762 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/fast_mult.cc

    r040ee80 rd2d22f  
    399399  return p;
    400400}
    401 static void buildTermAndAdd(int n,number* facult,poly* f_terms,int* exp,int f_len,kBucket_pt erg_bucket,ring r){
    402   number denom=n_Init(1,r);
     401static void buildTermAndAdd(int n,number* facult,poly* f_terms,int* exp,int f_len,kBucket_pt erg_bucket,ring r, number coef){
     402 
    403403  int i;
    404404  poly term=p_Init(r);
    405   for(i=0;i<f_len;i++){
    406     if(exp[i]!=0){
    407       number trash=denom;
    408       denom=n_Mult(denom,facult[exp[i]],r);
    409       n_Delete(&trash,r);
    410     }
     405
     406   //  number denom=n_Init(1,r);
     407//   for(i=0;i<f_len;i++){
     408//     if(exp[i]!=0){
     409//       number trash=denom;
     410//       denom=n_Mult(denom,facult[exp[i]],r);
     411//       n_Delete(&trash,r);
     412//     }
    411413   
    412   }
    413   number coef=n_IntDiv(facult[n],denom,r);   //right function here?
    414   n_Delete(&denom,r);
    415   poly erg=p_NSet(coef,r);
     414//   }
     415//   number coef=n_IntDiv(facult[n],denom,r);   //right function here?
     416//   n_Delete(&denom,r);
     417//   poly erg=p_NSet(coef,r);
     418  poly erg=p_NSet(n_Copy(coef,r),r);
    416419  for(i=0;i<f_len;i++){
    417420    if(exp[i]!=0){
     
    424427   
    425428  }
    426   int pseudo_len=0;
     429  int pseudo_len=1;
    427430  kBucket_Add_q(erg_bucket,erg,&pseudo_len);
    428431}
     
    430433
    431434
    432 static void MC_iterate(poly f, int n, ring r, int f_len,number* facult, int* exp,poly* f_terms,kBucket_pt erg_bucket,int pos,int sum){
     435static void MC_iterate(poly f, int n, ring r, int f_len,number* facult, int* exp,poly* f_terms,kBucket_pt erg_bucket,int pos,int sum, number coef){
    433436  int i;
     437
    434438  if (pos<f_len-1){
    435439    for(i=0;i<=n-sum;i++){
    436440      exp[pos]=i;
    437       MC_iterate(f, n, r, f_len,facult, exp,f_terms,erg_bucket,pos+1,sum+i);
     441      number new_coef=n_IntDiv(coef,facult[i],r);
     442      MC_iterate(f, n, r, f_len,facult, exp,f_terms,erg_bucket,pos+1,sum+i,new_coef);
     443      n_Delete(& new_coef,r);
    438444    }
    439445    return;
     
    442448    i=n-sum;
    443449    exp[pos]=i;
    444     buildTermAndAdd(n,facult,f_terms,exp,f_len,erg_bucket,r);
     450    number new_coef=n_IntDiv(coef,facult[i],r);
     451    buildTermAndAdd(n,facult,f_terms,exp,f_len,erg_bucket,r, new_coef);
     452    n_Delete(& new_coef,r);
    445453  }
    446454  assume(pos<=f_len-1);
     
    472480  }
    473481  assume(f_iter==NULL);
    474   MC_iterate(f,n,r,f_len,&facult[0], &exp[0], &f_terms[0],erg_bucket,0,0);
     482  MC_iterate(f,n,r,f_len,&facult[0], &exp[0], &f_terms[0],erg_bucket,0,0,facult[n]);
    475483
    476484
     
    483491  //free facult
    484492  for(i=0;i<=n;i++){
    485     nDelete(&facult[0]);
     493    nDelete(&facult[i]);
    486494  }
    487495  omfree(exp);
     
    491499  poly erg;
    492500  kBucketClear(erg_bucket,&erg, &len);
     501  kBucketDestroy(&erg_bucket);
    493502  return erg;
    494503}
Note: See TracChangeset for help on using the changeset viewer.