断言语句不正常?

时间:2018-02-17 09:45:05

标签: c++

我无法理解断言声明的性质

我认为我的程序运行不正常,但是当我将主程序打印出我的程序返回给我的返回值时,这是我的断言声明应该接受的确切值。我不知道发生了什么事。我将该函数复制粘贴到另一个文件中,并复制粘贴我的断言语句,这次不同的断言案例有效(有些案例不起作用,现在正在工作,有些案例有效,现在不用了#39 ; T)。 当我通过调试器时,似乎assert语句导致某个逻辑语句

当有逻辑时,有时不工作。我不明白为什么......有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:2)

问题是您在removeDuplicatedValues内部修改了传递的数组,因此首先assert((removeDuplicatedValues(duplicates1, 5)) == 1);断言成功,但是当您使用相同的数组assert((removeDuplicatedValues(duplicates1, 4)) == 1);调用下一个断言时,它将失败,因为重复项已被删除从那个数组。所以你应该重写你的测试只使用一次数组(甚至切换到专用的单元测试框架):

{
   string duplicates[7] = { "kek" , "hello" , "kek" , "daisy" , "bear" , "bear" , "bear" };
   assert((removeDuplicatedValues(duplicates, 5)) == 1); // ok
}
{
   string duplicates[7] = { "kek" , "hello" , "kek" , "daisy" , "bear" , "bear" , "bear" };
   assert((removeDuplicatedValues(duplicates, 4)) == 1); // ok
}