记录一个宏定义没打括号引起的bug

78 阅读1分钟

分配了2577个unsigned long数组:(NUM_BITSET就是2577)(图1)

6af861060de1d4120392a3b40d7c9c1.png

gdb里显示可以访问到:图2

91bc6d30db6ece3ba59913022caf884.png

在另一个函数里却只能访问到2571下标处,不能访问2572下标了:图3、4

ce27c93f4fbb4af07574794a6deedef.png

732b3f91a24ee4d9be0f54730b5243f.png

1486行输出:图5

f41005f1581d17e33981363790c94e7.png

三小时后,问题解决了,是因为:

#define NUM_BITSET 2568+NUM_PROTOCOL+1+NUM_PORT_BITSET2

没有打括号,第1344行申请时256*8+16+1+256*2没有用括号括起来,然后直接乘以8了,得到 6161 字节,没有分配2577*8字节。