IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 10607


Ignore:
Timestamp:
Dec 10, 2006, 7:28:33 AM (20 years ago)
Author:
magnier
Message:

fixed memory errors

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/math/psPolynomialUtils.c

    r10605 r10607  
    180180psPolynomial2D *psPolynomial2D_dX (psPolynomial2D *out, psPolynomial2D *poly)
    181181{
    182     psPolynomial2D *dest = NULL;
    183182    int nXout = poly->nX - 1;
    184183    int nYout = poly->nY;
    185184
     185    if (out == poly) {
     186        psError(PS_ERR_UNKNOWN, false, "cannot assign output to input polynomial");
     187        return NULL;
     188    }
     189
    186190    if (poly->nX == 0)
    187191        return NULL;
    188192
    189     bool inPlace = false;
    190 
    191193    if (out == NULL) {
    192         dest = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
    193         out = dest;
    194     } else {
    195         if (out == poly) {
    196             inPlace = true;
    197             dest = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
    198         } else {
    199             dest = out;
    200             psPolynomial2DRecycle (dest, poly->type, nXout, nYout);
    201         }
     194        out = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
     195    } else {
     196        psPolynomial2DRecycle (out, poly->type, nXout, nYout);
    202197    }
    203198
    204199    for (int i = 0; i < nXout + 1; i++) {
    205200        for (int j = 0; j < nYout + 1; j++) {
    206             dest->mask[i][j] = poly->mask[i+1][j];
    207             dest->coeff[i][j] = poly->coeff[i+1][j] * (i+1);
    208         }
    209     }
    210 
    211     if (inPlace) {
    212         psFree (poly);
    213         out = dest;
     201            out->mask[i][j] = poly->mask[i+1][j];
     202            out->coeff[i][j] = poly->coeff[i+1][j] * (i+1);
     203        }
    214204    }
    215205    return out;
     
    218208psPolynomial2D *psPolynomial2D_dY (psPolynomial2D *out, psPolynomial2D *poly)
    219209{
    220     psPolynomial2D *dest = NULL;
    221210    int nXout = poly->nX;
    222211    int nYout = poly->nY - 1;
    223212
     213    if (out == poly) {
     214        psError(PS_ERR_UNKNOWN, false, "cannot assign output to input polynomial");
     215        return NULL;
     216    }
     217
    224218    if (poly->nY == 0)
    225219        return NULL;
    226220
    227     bool inPlace = false;
    228 
    229221    if (out == NULL) {
    230         dest = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
    231         out = dest;
    232     } else {
    233         if (out == poly) {
    234             inPlace = true;
    235             dest = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
    236         } else {
    237             dest = out;
    238             psPolynomial2DRecycle (dest, poly->type, nXout, nYout);
    239         }
     222        out = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
     223    } else {
     224        psPolynomial2DRecycle (out, poly->type, nXout, nYout);
    240225    }
    241226
    242227    for (int i = 0; i < nXout + 1; i++) {
    243228        for (int j = 0; j < nYout + 1; j++) {
    244             dest->mask[i][j] = poly->mask[i][j+1];
    245             dest->coeff[i][j] = poly->coeff[i][j+1] * (j+1);
    246         }
    247     }
    248 
    249     if (inPlace) {
    250         psFree (poly);
    251         out = dest;
     229            out->mask[i][j] = poly->mask[i][j+1];
     230            out->coeff[i][j] = poly->coeff[i][j+1] * (j+1);
     231        }
    252232    }
    253233    return out;
Note: See TracChangeset for help on using the changeset viewer.