了解错误'double free or corruption'
Understanding 'double free or corruption' error
我正在从python
脚本(OS Ubuntu 14.04)调用C++
应用程序,如下所示:
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 ***
应用程序本身是第三方二进制文件,这意味着,我无法访问源代码。然而,即使在建议下,有一些bug在app
导致删除尝试相同的实体两次有3个奇怪的行为,我无法理解:
- 错误随机发生,相当罕见(大约20%的运行在相同的数据上)。
app
的其他一些用户也会得到这个错误;然而,他们中的一些人从来没有得到它。 - 它不会被子进程的
stderr
流捕获(因此sys.exit(1)
不会执行)。 - 有时我在括号中看到
top
而不是!prev
。
Double free就是这个意思:
int *a = new int;
delete a;
delete a;
对于损坏,如:
int *a = new int[10];
a++;
delete a;
当应用程序请求释放一些已经释放的内存,或者地址与分配时获得的地址不对应时,glibc会生成此消息。
相关文章:
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 逻辑'double free or corruption (fasttop)'错误
- emplace_back和push_back给出错误'double free or corruption (fasttop)'尽管定义了复制和移动构造函数
- C++ 调用析构函数后动态模板队列"double free or corruption (out)"
- std::vector using back(), pop_back(), push_back(), 得到'double free or corruption'错误
- 二叉树中shared_ptr "double free or corruption"
- 我在C++中使用删除运算符时遇到问题。我在运行时不断收到"double free or corruption (fasttop)"错误
- Double free() or corruption:C++
- 重新排列代码行时未引发错误"Double free or corruption"
- 运行时错误:"*** glibc detected ***: double free or corruption (out)"
- 实现动态数组数据结构时出现"double free or corruption"错误
- 与"glibc detected: vector double free or corruption (out)"崩溃
- 显式调用析构函数时的 C++ 内存错误 ("double free or corruption"
- 为什么我会"double free or corruption"?
- C++:全局外部变量"double free or corruption"?
- 为什么两个程序中的一个会导致错误"*** glibc detected *** double free or corruption"而另一个则不会导致错误?
- 了解错误'double free or corruption'