我正在调用C++
脚本(OS Ubuntu 14.04)中的python
应用程序,如下所示:
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个陌生:
app
的其他一些用户也会收到此错误;然而,有些人从来没有得到它。stderr
流捕获(因此sys.exit(1)
不会被执行)。top
而不是!prev
。有人可以解释一下,这些功能是如何产生的,甚至可以给出一个再现这种行为的C ++代码示例?
答案 0 :(得分:4)
Double free正是它的含义:
$ rvm osx-ssl-certs status all
Certificates for /usr/local/etc/openssl/cert.pem: Up to date.
Certificates for /etc/openssl/cert.pem: Up to date.
腐败之类的东西:
int *a = new int;
delete a;
delete a;
当应用程序请求释放已释放的某些内存,或者该地址与分配时获得的地址不对应时,glibc生成此消息。