使用TYPE进行元素分配问题

时间:2015-04-16 03:58:10

标签: c arrays pointers

我正在尝试将TYPE用于通用数组,但似乎没有得到正确的语法。我可以使用int来使用代码,但是当我转换为TYPE时,语句分配值将停止工作。

这是我的数组创建:

struct DynArr
{
    TYPE *data;     /* pointer to the data array */
    int size;       /* Number of elements in the array */
    int capacity;   /* capacity ofthe array */
};


void initDynArr(DynArr *v, int capacity)
{
    assert(capacity > 0);
    assert(v!= 0);
    v->data = (TYPE *) malloc(sizeof(TYPE) * capacity);
    assert(v->data != 0);
    v->size = 0;
    v->capacity = capacity;
}


DynArr* createDynArr(int cap)
{
    assert(cap > 0);
    DynArr *r = (DynArr *)malloc(sizeof( DynArr));
    assert(r != 0);
    initDynArr(r,cap);
    return r;
}

以下是我的修改要求:

void addDynArr(DynArr *v, TYPE val)
{    
    /* Add Element */
    *v->data = val;
    v->size++;    
}

代码正在编译,但未将val分配给data字段。

修改:在我的测试案例中,我将TYPE作为double传递。

测试函数调用:

addDynArr(dyn, 3);
addDynArr(dyn, 4);

运行以下val时报告为0:

printf("Val: %d ", val)
    /* Add Element */
    v->data[v->size] = val;
    v->size++;

1 个答案:

答案 0 :(得分:0)

您对addDynArr()的实施是错误的。您始终将val分配给data的第一个元素,而不是data末尾的下一个可用元素。它需要看起来更像这样:

void addDynArr(DynArr *v, TYPE val)
{
    if (v->size < v->capacity)
    {
        /* Add Element */
        v->data[v->size] = val;
        v->size++;
    }
}