能力值:
( LV2,RANK:10 )
|
-
-
2 楼
不太清楚Qt中QVector类是怎么定义的 但在std::vector里 空容器上调用pop_back导致未定义行为 如果容器为空 begin() == end() 为了程序的通用性 迭代器比较建议使用 != 而不是 <> 所以我认为不是isEmpty的坑 而是空容器上调用pop_back的坑
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
是空也进不到循环里啊, 怎么会调用pop?
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
contain_of
不太清楚Qt中QVector类是怎么定义的 但在std::vector里 空容器上调用pop_back导致未定义行为
如果容器为空 begin() == end() 为了程序的通用性 迭代器比较建 ...
我没有试过std::vector,使用QVector为空的时候,继续pop_back会使其size一直减小,变成负数,导致end在begin前面。
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
值得怀疑
是空也进不到循环里啊, 怎么会调用pop?
代码前面有pop_back导致了QVector的size为负数,而isEmpty的实现是size == 0.
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
_THINCT
我没有试过std::vector,使用QVector为空的时候,继续pop_back会使其size一直减小,变成负数,导致end在begin前面。
#include <iostream> #include <vector> using namespace std; int main() { std::vector<int> numbers; numbers.pop_back(); cout << numbers.size() << "\n"; return 0; } // 输出18446744073709551615 // Apple clang version 13.1.6 (clang-1316.0.21.2.5)
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
_THINCT
代码前面有pop_back导致了QVector的size为负数,而isEmpty的实现是size == 0.
代码前面有pop_back 这个前面指哪里 #include <iostream> #include <vector> using namespace std; int main() { std::vector<int> numbers{1, 2, 3, 4}; while (!numbers.empty()) { numbers.pop_back(); cout << numbers.size() << "\n"; } cout << "last " << numbers.size() << "\n"; return 0; } // 3 2 1 0 last 0
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
_THINCT
代码前面有pop_back导致了QVector的size为负数,而isEmpty的实现是size == 0.
那这也不能算QVector吧,毕竟没有元素的时候进行了pop操作。
|
能力值:
( LV3,RANK:20 )
|
-
-
9 楼
xuezhimeng
那这也不能算QVector吧,毕竟没有元素的时候进行了pop操作。
关键点是pop没有元素了,isEmpty返回的为true。
|
能力值:
( LV3,RANK:20 )
|
-
-
10 楼
// 实验环境为32位 vector<int*> vec; std::cout << (vec.empty()) << std::endl; // 输出 1 vec.pop_back(); std::cout << (vec.empty()) << std::endl; // 输出 0, 其实没有元素的 std::cout << (vec.size()) << std::endl; // 输出 4294967295 std::cout << (int)vec.size() << std::endl; // 输出 -1
最后于 2024-3-22 08:47
被_THINCT编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
都空了 就别去pop_back了 当然会导致未定义行为啦
|
能力值:
( LV1,RANK:0 )
|
-
-
12 楼
自己菜,怪Qt
|
能力值:
( LV3,RANK:20 )
|
-
-
13 楼
linglonger
自己菜,怪Qt
大佬厉害
最后于 2024-3-22 10:55
被_THINCT编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
是不是多线程环境?没有加锁是有可能出现这种情况的。
|
能力值:
( LV3,RANK:20 )
|
-
-
15 楼
superlover
是不是多线程环境?没有加锁是有可能出现这种情况的。
倒没有用到多线程。是一个计算器功能的实现,里面的逻辑分支太多了,出现了逻辑错误。如果是多线程,估计更加难以发现了。
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
_THINCT
倒没有用到多线程。是一个计算器功能的实现,里面的逻辑分支太多了,出现了逻辑错误。如果是多线程,估计更加难以发现了。
while (!operStack.isEmpty())的时候其他地方有没有operStack的push操作,一般情况下是不会出现这种低级错误的
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
感谢分享
|
能力值:
( LV3,RANK:30 )
|
-
-
18 楼
.
最后于 2024-3-25 10:51
被Istaroth编辑
,原因: 1
|
|
|