我有一个函数,我断言(使用assert.h)传递的参数大于0:
DynArr* createDynArr(int cap)
{
assert(cap > 0);
...
}
此行在main ..
运行DynArr *dyn;
dyn = createDynArr(2);
我收到此错误:
main: dynamicArray.c:46: createDynArr: Assertion 'cap > 0' failed.
Abort(core dumped)
为什么要这样做?
编辑 - 这是一个更完整的例子。
这是文件dynamicArray.c中函数的结构和完整实现:
struct DynArr
{
TYPE *data; /* pointer to the data array */
int size; /* Number of elements in the array */
int capacity; /* capacity ofthe array */
};
DynArr* createDynArr(int cap)
{
assert(cap > 0);
DynArr *r = (DynArr *)malloc(sizeof( DynArr));
assert(r != 0);
initDynArr(r,cap);
return r;
}
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;
}
在一个单独的文件testDynArr.c中,我有一个main函数,我尝试创建一个DynArr结构并给它2的容量:
int main(int argc, char* argv[]){
DynArr *dyn;
dyn = createDynArr(2);
printf("\n\nTesting addDynArr...\n");
...
}
我这样链接这些文件:
gcc -o main dynamicArray.c testDynArr.c
然后运行main,它给出了断言错误。
答案 0 :(得分:0)
我看到你使用一个值的唯一原因,当放在int类型的对象中时,该值变为负值。这似乎是您使用的整数值大于INT_MAX
至于你的代码片段,如果要更新一些细节(例如使用结构标记等),那么它将编译并成功运行。
您应该查看断言消息。它显示了cap的实际值。:)