Note: This website is archived. For up-to-date information about D projects and development, please visit wiki.dlang.org.

Changeset 808

Show
Ignore:
Timestamp:
12/19/10 07:28:15 (14 years ago)
Author:
walter
Message:

fix 2 issues spotted by valgrind

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/dmd-1.x/src/root/aav.c

    r606 r808  
    144144            { 
    145145                if (len <= prime_list[i]) 
    146146                    break; 
    147147            } 
    148148            len = prime_list[i]; 
    149149            newb.b = new aaA*[len]; 
    150150            memset(newb.b, 0, len * sizeof(aaA*)); 
    151151            newb.b_length = len; 
    152152 
    153153            for (size_t k = 0; k < aa->b_length; k++) 
    154154            {   aaA *e = aa->b[k]; 
    155155                while (e) 
    156156                {   aaA* enext = e->next; 
    157157                    size_t j = (size_t)e->key % len; 
    158158                    e->next = newb.b[j]; 
    159159                    newb.b[j] = e; 
    160160                    e = enext; 
    161161                } 
    162162            } 
    163163            if (aa->b != aa->binit) 
    164                 delete aa->b; 
     164                delete[] aa->b; 
    165165 
    166166            newb.nodes = aa->nodes; 
    167167        } 
    168168 
    169169        **paa = newb; 
    170170    } 
    171171} 
    172172 
    173173 
    174174#if UNITTEST 
    175175 
    176176void unittest_aa() 
    177177{ 
    178178    AA* aa = NULL; 
    179179    Value v = _aaGetRvalue(aa, NULL); 
    180180    assert(!v); 
    181181    Value *pv = _aaGet(&aa, NULL); 
    182182    assert(pv); 
    183183    *pv = (void *)3; 
    184184    v = _aaGetRvalue(aa, NULL); 
  • branches/dmd-1.x/src/root/array.c

    r518 r808  
    160160        reserve(d); 
    161161        if (dim != index) 
    162162            memmove(data + index + d, data + index, (dim - index) * sizeof(*data)); 
    163163        memcpy(data + index, a->data, d * sizeof(*data)); 
    164164        dim += d; 
    165165    } 
    166166} 
    167167 
    168168 
    169169/*********************************** 
    170170 * Append array a to this array. 
    171171 */ 
    172172 
    173173void Array::append(Array *a) 
    174174{ 
    175175    insert(dim, a); 
    176176} 
    177177 
    178178void Array::remove(unsigned i) 
    179179{ 
    180     memmove(data + i, data + i + 1, (dim - i) * sizeof(data[0])); 
     180    if (dim - i - 1) 
     181        memmove(data + i, data + i + 1, (dim - i - 1) * sizeof(data[0])); 
    181182    dim--; 
    182183} 
    183184 
    184185char *Array::toChars() 
    185186{ 
    186187    unsigned len; 
    187188    unsigned u; 
    188189    char **buf; 
    189190    char *str; 
    190191    char *p; 
    191192 
    192193    buf = (char **)alloca(dim * sizeof(char *)); 
    193194    len = 2; 
    194195    for (u = 0; u < dim; u++) 
    195196    { 
    196197        buf[u] = ((Object *)data[u])->toChars(); 
    197198        len += strlen(buf[u]) + 1; 
    198199    } 
    199200    str = (char *)mem.malloc(len); 
    200201 
  • trunk/src/root/aav.c

    r484 r808  
    144144            { 
    145145                if (len <= prime_list[i]) 
    146146                    break; 
    147147            } 
    148148            len = prime_list[i]; 
    149149            newb.b = new aaA*[len]; 
    150150            memset(newb.b, 0, len * sizeof(aaA*)); 
    151151            newb.b_length = len; 
    152152 
    153153            for (size_t k = 0; k < aa->b_length; k++) 
    154154            {   aaA *e = aa->b[k]; 
    155155                while (e) 
    156156                {   aaA* enext = e->next; 
    157157                    size_t j = (size_t)e->key % len; 
    158158                    e->next = newb.b[j]; 
    159159                    newb.b[j] = e; 
    160160                    e = enext; 
    161161                } 
    162162            } 
    163163            if (aa->b != aa->binit) 
    164                 delete aa->b; 
     164                delete[] aa->b; 
    165165 
    166166            newb.nodes = aa->nodes; 
    167167        } 
    168168 
    169169        **paa = newb; 
    170170    } 
    171171} 
    172172 
    173173 
    174174#if UNITTEST 
    175175 
    176176void unittest_aa() 
    177177{ 
    178178    AA* aa = NULL; 
    179179    Value v = _aaGetRvalue(aa, NULL); 
    180180    assert(!v); 
    181181    Value *pv = _aaGet(&aa, NULL); 
    182182    assert(pv); 
    183183    *pv = (void *)3; 
    184184    v = _aaGetRvalue(aa, NULL); 
  • trunk/src/root/array.c

    r518 r808  
    160160        reserve(d); 
    161161        if (dim != index) 
    162162            memmove(data + index + d, data + index, (dim - index) * sizeof(*data)); 
    163163        memcpy(data + index, a->data, d * sizeof(*data)); 
    164164        dim += d; 
    165165    } 
    166166} 
    167167 
    168168 
    169169/*********************************** 
    170170 * Append array a to this array. 
    171171 */ 
    172172 
    173173void Array::append(Array *a) 
    174174{ 
    175175    insert(dim, a); 
    176176} 
    177177 
    178178void Array::remove(unsigned i) 
    179179{ 
    180     memmove(data + i, data + i + 1, (dim - i) * sizeof(data[0])); 
     180    if (dim - i - 1) 
     181        memmove(data + i, data + i + 1, (dim - i - 1) * sizeof(data[0])); 
    181182    dim--; 
    182183} 
    183184 
    184185char *Array::toChars() 
    185186{ 
    186187    unsigned len; 
    187188    unsigned u; 
    188189    char **buf; 
    189190    char *str; 
    190191    char *p; 
    191192 
    192193    buf = (char **)alloca(dim * sizeof(char *)); 
    193194    len = 2; 
    194195    for (u = 0; u < dim; u++) 
    195196    { 
    196197        buf[u] = ((Object *)data[u])->toChars(); 
    197198        len += strlen(buf[u]) + 1; 
    198199    } 
    199200    str = (char *)mem.malloc(len); 
    200201