Changeset 7621150 in git


Ignore:
Timestamp:
Oct 20, 1999, 5:58:35 PM (25 years ago)
Author:
Wilfred Pohl <pohl@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'b52fc4b2495505785981d640dcf7eb3e456778ef')
Children:
1c480575514e8e0c6c1f3d7f22a89a09de6d3b71
Parents:
b82c79787be43aa8ad783130c1c619bf5f32e5a6
Message:
memory-bug fixed


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

Legend:

Unmodified
Added
Removed
  • Singular/sparsmat.cc

    rb82c79 r7621150  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: sparsmat.cc,v 1.13 1999-10-14 14:27:31 obachman Exp $ */
     4/* $Id: sparsmat.cc,v 1.14 1999-10-20 15:58:35 pohl Exp $ */
    55
    66/*
     
    3333#endif
    3434/* ----------------- general definitions ------------------ */
    35 
     35/* in structs.h
     36typedef struct smprec sm_prec;
     37typedef sm_prec * smpoly;
     38struct smprec{
     39  smpoly n;            // the next element
     40  int pos;             // position
     41  int e;               // level
     42  poly m;              // the element
     43  float f;             // complexity of the element
     44};
     45*/
    3646/* declare internal 'C' stuff */
    3747static void smExactPolyDiv(poly, poly);
     
    225235lists smCallBareiss(ideal I, int x, int y)
    226236{
     237  ring origR;
     238  sip_sring tmpR;
    227239  lists res=(lists)AllocSizeOf(slists);
    228   ideal II = idCopy(I);
     240  ideal II = smRingCopy(I,&origR,tmpR);
    229241  sparse_mat *bareiss = new sparse_mat(II);
     242  ideal mm=II;
    230243  intvec *v;
    231244  ideal m;
    232245
    233   idDelete(&II);
    234246  if (bareiss->smGetAct() == NULL)
    235247  {
    236     FreeSizeOf((ADDRESS)res, slists);
    237     return NULL;
    238   }
    239   bareiss->smBareiss(x, y);
    240   m = bareiss->smRes2Mod();
    241   v = new intvec(bareiss->smGetRed());
    242   bareiss->smToIntvec(v);
    243   delete bareiss;
     248    delete bareiss;
     249    if (origR!=NULL) smRingClean(origR,tmpR);
     250    v=new intvec(1,pVariables);
     251  }
     252  else
     253  {
     254    idDelete(&II);
     255    bareiss->smBareiss(x, y);
     256    m = bareiss->smRes2Mod();
     257    v = new intvec(bareiss->smGetRed());
     258    bareiss->smToIntvec(v);
     259    delete bareiss;
     260    if (origR!=NULL)
     261    {
     262      rChangeCurrRing(origR,TRUE);
     263      mm=idInit(IDELEMS(m),m->rank);
     264      int k;
     265      for (k=0;k<IDELEMS(m);k++) mm->m[k] = pFetchCopy(&tmpR, m->m[k]);
     266      rChangeCurrRing(&tmpR,FALSE);
     267      idDelete(&m);
     268      smRingClean(origR,tmpR);
     269    }
     270    else
     271    {
     272      mm=m;
     273    }
     274  }
    244275  res->Init(2);
    245276  res->m[0].rtyp=MODUL_CMD;
    246   res->m[0].data=(void *)m;
     277  res->m[0].data=(void *)mm;
    247278  res->m[1].rtyp=INTVEC_CMD;
    248279  res->m[1].data=(void *)v;
     
    467498    this->smToredElim();
    468499  }
    469   if (y < 2) y = 2;
    470   if (act < y)
     500  if (y < 1) y = 1;
     501  if (act <= y)
    471502  {
    472503    this->smCopToRes();
    473504    return;
    474505  }
     506  normalize = this->smCheckNormalize();
     507  if (normalize) this->smNormalize();
    475508  this->smPivot();
    476509  this->smSelectPR();
     
    490523  loop
    491524  {
     525    if (normalize) this->smNormalize();
    492526    this->smPivot();
    493527    oldpiv = piv;
     
    781815    {
    782816      a = m_act[i];
    783       do
     817      while (a != NULL)
    784818      {
    785819        ha = SM_MULT(a->m, p, q);
     
    788822        a->m = ha;
    789823        a = a->n;
    790       } while (a != NULL);
     824      }
    791825    }
    792826    return;
     
    797831    if ((r == NULL) || (i != r->pos))  // cols without elimination
    798832    {
    799       do
     833      while (a != NULL)
    800834      {
    801835        ha = SM_MULT(a->m, p, q);
     
    804838        a->m = ha;
    805839        a = a->n;
    806       } while (a != NULL);
     840      }
    807841    }
    808842    else                    // cols with elimination
     
    814848      loop                  // combine the chains a and b: p*a + w*b
    815849      {
     850        if (a == NULL)
     851        {
     852          if (b != NULL)
     853          {
     854            do
     855            {
     856              res = res->n = smElemCopy(b);
     857              hb = SM_MULT(b->m, w, q);
     858              if (q) SM_DIV(hb, q);
     859              res->m = hb;
     860              b = b->n;
     861            } while (b != NULL);
     862          }
     863          else
     864            res->n = NULL;
     865          break;
     866        }
     867        if (b == NULL)
     868        {
     869          do
     870          {
     871            ha = SM_MULT(a->m, p, q);
     872            pDelete(&a->m);
     873            if (q) SM_DIV(ha, q);
     874            a->m = ha;
     875            res = res->n = a;
     876            a = a->n;
     877          } while (a != NULL);
     878          break;
     879        }
    816880        if (a->pos < b->pos)
    817881        {
     
    850914          b = b->n;
    851915        }
    852         if (a == NULL)
    853         {
    854           if (b != NULL)
    855           {
    856             do
    857             {
    858               res = res->n = smElemCopy(b);
    859               hb = SM_MULT(b->m, w, q);
    860               if (q) SM_DIV(hb, q);
    861               res->m = hb;
    862               b = b->n;
    863             } while (b != NULL);
    864           }
    865           else
    866             res->n = NULL;
    867           break;
    868         }
    869         if (b == NULL)
    870         {
    871           do
    872           {
    873             ha = SM_MULT(a->m, p, q);
    874             pDelete(&a->m);
    875             if (q) SM_DIV(ha, q);
    876             a->m = ha;
    877             res = res->n = a;
    878             a = a->n;
    879           } while (a != NULL);
    880           break;
    881         }
    882916      }
    883917      m_act[i] = dumm->n;
     
    897931
    898932  if ((c == NULL) || (r == NULL))
    899     return;
     933  {
     934    while (r!=NULL) smElemDelete(&r);
     935    return;
     936  }
    900937  do
    901938  {
     
    9761013  if ((c == NULL) || (r == NULL))
    9771014  {
     1015    while(r!=NULL) smElemDelete(&r);
    9781016    pDelete(&hp);
    9791017    return;
     
    19191957{
    19201958  const number y = pGetCoeff(e);
    1921   number x;
    1922   poly res, h, r;
     1959  poly r = NULL;
     1960  poly res, h;
    19231961  int i;
    19241962  EXPONENT_TYPE w;
    19251963
    1926   r = h = res = pInit();
     1964  h = res = pInit();
    19271965  loop
    19281966  {
    1929     x = pGetCoeff(t);
    1930     for (i=pVariables; i; i--)
     1967    i=pVariables;
     1968    loop
    19311969    {
    19321970      w = pGetExp(e,i)+pGetExp(t,i);
    19331971      if (w < 0) break;
    19341972      pSetExp(h,i,w);
     1973      i--;
     1974      if (i == 0)
     1975      {
     1976        pSetm(h);
     1977        pSetCoeff0(h,nMult(y,pGetCoeff(t)));
     1978        pIter(t);
     1979        if (t == NULL)
     1980        {
     1981          pNext(h) = NULL;
     1982          return res;
     1983        }
     1984        r = h;
     1985        h = pNext(h) = pInit();
     1986        i=pVariables;
     1987      }
    19351988    }
    19361989    pIter(t);
    1937     if (i == 0)
    1938     {
    1939       //pSetComp(h,0);
    1940       pSetm(h);
    1941       pSetCoeff0(h,nMult(y,x));
    1942       if (t == NULL)
    1943       {
    1944         pNext(h) = NULL;
    1945         return res;
    1946       }
    1947       r = h;
    1948       h = pNext(h) = pInit();
    1949     }
    1950     else if (t == NULL)
    1951     {
    1952       if (r != h)
     1990    if (t == NULL)
     1991    {
     1992      if (r != NULL)
    19531993        pNext(r) = NULL;
    19541994      else
     
    20982138{
    20992139  smpoly r = (smpoly)AllocSizeOf(smprec);
    2100 
    21012140  memcpy(r, a, sizeof(smprec));
    21022141/*  r->m = pCopy(r->m); */
Note: See TracChangeset for help on using the changeset viewer.