我有一个函数,我断言(使用 assert.h)传递的参数大于 0:
DynArr* createDynArr(int cap)
{
assert(cap > 0);
...
}
当这条线在主线中运行时。
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,我有一个主要函数,我尝试创建一个DynArr结构并赋予它2的容量:
int main(int argc, char* argv[]){
DynArr *dyn;
dyn = createDynArr(2);
printf("nnTesting addDynArr...n");
...
}
我像这样链接这些文件:
gcc -o main dynamicArray.c testDynArr.c
然后运行 main,这给出了断言错误。
我看到您使用的值的唯一原因,该值在放置在 int 类型的对象中时变为负值。也就是说,您似乎正在使用大于INT_MAX
的整数值
至于你的代码片段,如果要更新一些细节(例如使用结构标签等),那么它将编译并成功运行。
您应该查看断言消息。它显示了cap.的实际值是多少:)