我正在尝试将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++;
答案 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++;
}
}