我有一个函数,我断言(使用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 会给出断言错误。
最佳答案
我看到您使用的值的唯一原因是,当放置在 int 类型的对象中时,该值会变成负值。也就是说,您使用的整数值似乎大于 INT_MAX
对于您的代码片段,如果更新一些细节(例如使用结构标记等),那么它将成功编译并运行。
您应该查看断言消息。它显示了 cap 的实际值是多少。:)
关于c - 即使条件为真,断言也会使我的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29661531/