1
bfjm 4 天前 via iPhone
xid 大小是否超过了 2 xid 是否有线程安全问题
|
4
billccn 3 天前
你是怎么定位到这行代码的?
这代码看上去人畜无害,除非编译器认为 xid.size()必定小于 2 ,于是编译了个 undefined behavior 进去? 当然编译问题也是有可能的,你有保留这行代码然后 clean 编译过一次吗? |
5
vfx666 OP @billccn 一点点排除定位到的问题,因为测试了软件之前的发行版没有问题,这就可以把范围缩小到具体的代码段了。然后进一步缩小排除,最后发现就是这么一行
保留这行代码,即使此代码并没有被执行(写一个 if 判断故意跳过这行)还是会触发问题。你说的 clean 编译是指的那个“重新编译…”选项吗 |
8
araraloren 3 天前
haha
|
9
Promtheus 3 天前
|
10
realpg 3 天前
先改写这一行
xid.erase(xid.end() - 2, xid.end()); 拆语句成 tmp_a = xid.end() tmp_b = tmp_a -2 log tmp_a, tmp_b to logfile with current timestamp xid.erase(tmp_b,tmp_a) |
11
lixile 3 天前
大概率 overflow 了 只是这行代码所在参与编译后 导致崩溃的内存位置被 overflow 到了
不参与时 overflow 位置 没有涉及关键内存 |