activesys/libcstl — Issue #8: deque经过多次push和pop操作之后，程序出现未定义行为。
Author: activesys
Created: 2011-11-13 05:50:45+00:00
State: open

1 #include
2
3 int main(int argc, char* argv[]) {
4 deque_t* pdeq_first = create_deque(int);
5 deque_t* pdeq_second = create_deque(int);
6 deque_t* pdeq_third = create_deque(int);
7 deque_t* pdeq_fourth = create_deque(int);
8 int i = 0;
9
10 deque_init(pdeq_first);
11 for(i = 0; i < 1000; ++i) {
12 deque_push_back(pdeq_first, 9);
13 deque_pop_front(pdeq_first);
14 }
15 deque_destroy(pdeq_first);
16
17 deque_init(pdeq_second);
18 for(i = 0; i < 1000; ++i) {
19 deque_push_front(pdeq_second, 9);
20 deque_pop_back(pdeq_second);
21 }
22 deque_destroy(pdeq_second);
23
24 deque_init(pdeq_third);
25 for(i = 0; i < 100; ++i) {
26 deque_push_back(pdeq_third, 9);
27 }
28 for(i = 0; i < 50; ++i) {
29 deque_pop_front(pdeq_third);
30 }
31 deque_insert_n(pdeq_third, deque_end(pdeq_third), 1000, 9);
32 deque_destroy(pdeq_third);
33
34 deque_init(pdeq_fourth);
35 for(i = 0; i < 100; ++i) {
36 deque_push_front(pdeq_fourth, 9);
37 }
38 for(i = 0; i < 50; ++i) {
39 deque_pop_back(pdeq_fourth);
40 }
41 deque_insert_n(pdeq_fourth, deque_begin(pdeq_fourth), 1000, 9);
42 deque_destroy(pdeq_fourth);
43
44 return 0;
45 }
46

这段代码展示了这个bug，当循环达到一定次数之后，12行，19行在debug版本中会崩溃，31行，41行在debug版本会崩溃。

感谢 无聊才聊 发现这个问题。