IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 24563 for trunk


Ignore:
Timestamp:
Jun 25, 2009, 3:04:07 PM (17 years ago)
Author:
eugene
Message:

zero newly-allocated vector elements

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/mathtypes/psVector.c

    r21183 r24563  
    7777    // Create vector data array
    7878    vector->data.U8 = psAlloc(nalloc * elementSize);
     79    memset (vector->data.U8, 0, nalloc * elementSize);
    7980
    8081    return vector;
     
    119120                _("psVectorRealloc must a given a non-NULL psVector to resize.  Desired datatype unknown."));
    120121        return NULL;
    121     } else if (vector->nalloc != nalloc) {     // No need to realloc to same size
    122         elemType = vector->type.type;
    123         elementSize = PSELEMTYPE_SIZEOF(elemType);
    124         if (nalloc < vector->n) {
    125             vector->n = nalloc;
    126         }
    127         // Realloc after decrementation to avoid accessing freed array elements
    128         vector->data.U8 = psRealloc(vector->data.U8, nalloc * elementSize);
    129         P_PSVECTOR_SET_NALLOC(vector,nalloc);
     122    }
     123
     124   
     125    if (vector->nalloc == nalloc) {     
     126        // No need to realloc to same size
     127        return vector;
     128    }
     129     
     130    elemType = vector->type.type;
     131    elementSize = PSELEMTYPE_SIZEOF(elemType);
     132
     133    long nstart = vector->n;
     134    if (nalloc < vector->n) {
     135        vector->n = nalloc;
     136    }
     137    // Realloc after decrementation to avoid accessing freed array elements
     138    vector->data.U8 = psRealloc(vector->data.U8, nalloc * elementSize);
     139    P_PSVECTOR_SET_NALLOC(vector,nalloc);
     140
     141    // fill newly allocated range with zeros:
     142    if (nstart < nalloc) {
     143        long nNew = nalloc - nstart;
     144        memset (&vector->data.U8[nstart*elementSize], 0, nNew*elementSize);
    130145    }
    131146
     
    165180    vector->type.type = type;
    166181    vector->n = nalloc;
     182
     183    // zero the vector
     184    memset (vector->data.U8, 0, byteSize);
     185
    167186    return vector;
    168187}
Note: See TracChangeset for help on using the changeset viewer.