我正在打电话C++
申请来自python
脚本(操作系统 Ubuntu 14.04)如下所示:
import sys, subprocess
run = subprocess.Popen(['app'] + args, stdout = subprocess.PIPE,
stderr = subprocess.PIPE)
stdout, stderr = run.communicate()
if stderr:
sys.stderr.write('Error in app: ' + stderr.decode('utf-8'))
sys.exit(1)
然后我收到以下错误消息(尽管地址每次都不同):
*** Error in `/usr/bin/app': double free or corruption (!prev): 0x00007f50eae98070 ***
该应用程序本身是第三方二进制文件,这意味着我无法访问源代码。然而,即使在建议下也存在一些错误app
导致删除尝试同一实体两次,该行为有 3 个奇怪之处,我无法理解:
- 该错误是随机发生的,而且相当罕见(大约 20% 的错误是在相同的数据上运行的)。该网站的其他一些用户
app
也得到这个错误;然而,他们中的一些人从未得到它。
- 它不会陷入
stderr
子流程的流(因此sys.exit(1)
不会被执行)。
- 有时我看到
top
代替!prev
在括号中。
有人可以向我解释一下这些功能是如何产生的,甚至可以给出一个重现这种行为的 C++ 代码示例吗?
双重免费正是它的含义:
int *a = new int;
delete a;
delete a;
对于腐败,例如:
int *a = new int[10];
a++;
delete a;
当应用程序请求释放一些已释放的内存,或者该地址与分配时获取的地址不对应时,glibc 会生成此消息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)