了解“双重释放或损坏”错误

2023-12-01

我正在打电话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 个奇怪之处,我无法理解:

  1. 该错误是随机发生的,而且相当罕见(大约 20% 的错误是在相同的数据上运行的)。该网站的其他一些用户app也得到这个错误;然而,他们中的一些人从未得到它。
  2. 它不会陷入stderr子流程的流(因此sys.exit(1)不会被执行)。
  3. 有时我看到top代替!prev在括号中。

有人可以向我解释一下这些功能是如何产生的,甚至可以给出一个重现这种行为的 C++ 代码示例吗?


双重免费正是它的含义:

int *a = new int;
delete a;
delete a;

对于腐败,例如:

int *a = new int[10];
a++;
delete a;

当应用程序请求释放一些已释放的内存,或者该地址与分配时获取的地址不对应时,glibc 会生成此消息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解“双重释放或损坏”错误 的相关文章

随机推荐

  • 在 R 中将直方图与密度图相结合

    当我将直方图和密度线组合在一个图中时 我似乎遇到了直方图和密度线之间的缩放问题 单独绘制密度曲线和两者组合绘制之间存在明显的视觉差异 两个图之间具有相同形状和比例的解决方案是什么 单独的密度以及与 histo 组合时的密度 我使用这段代码
  • 迭代 JS 数组的定义元素

    我使用 JS 数组将 ID 映射到实际元素 即键值存储 我想迭代所有元素 我尝试了几种方法 但都有其注意事项 for var item in map 迭代数组的所有属性 因此它还包括 Array prototype 的函数和扩展 例如 将来
  • 如何将“python --version”的输出附加到 bash shell 中的文件?

    我正在尝试编写一个简短的脚本来将当前 shell 会话的某些环境变量记录到文件中 不幸的是 python version 的输出似乎忽略了 gt gt 运算符并打印到 shell 而不是文件 我的最小 不 工作示例 rm path log
  • User.IsInRole() 在 MVC C# 类中工作

    我在用 If User IsInRole member 但无法让它在 C MVC 类中工作 请注意 我没有在可以工作的控制器中使用它 我缺少什么 该代码甚至无法识别用户是什么 我认为它可能是一个命名空间 但我已经使用了 Mvc命名空间以及其
  • 我应该在实体框架连接字符串中使用 Pooling=False 吗?

    我们有一个在 Azure 上运行的 ASP Net MVC3 应用程序 通过实体框架连接到 Sql Azure 数据库 生成此内容的开发人员在连接字符串中具有 Pooling False 我本以为这是一个坏主意 如果可能的话 我们难道不想重
  • p4 命令相当于 git/hg/bzr/svn status 之类的命令是什么? (提示:不是“p4 状态”)

    问 其他版本控制工具的 status 命令的 perforce 等效项是什么 E g git status or hg status or bzr status or svn status 令人困惑的是 cvs update nq是该版本控
  • plt.show() 中的一组关键字“block”如何默认等于 True?

    由于某种原因 我需要显式地将关键字 block 设置为 True 以便当我从 bash shell 运行脚本时显示绘图 当我从 ipython shell 运行它时 我不需要它 我怎样才能默认将该参数设置为 True 因为几乎每个人似乎都有
  • 未能找到哈希字符串“android-22”的目标

    我已经用最新版本更新了 android studio 然后在谷歌搜索后我还用 API 18 更新了 Android SDK 但仍然给出了相同的错误 只需点击错误中写入的链接即可 打开Android SDK管理器 它会显示对话框 帮助您安装项
  • 为什么对显式类型化向量进行索引会失败并出现类型推断错误?

    In the code下面 我生成一个向量 然后将其用作闭包的内容 fn main let f let xs Vec lt usize usize gt Vec new populate xs move i j xs j 1 xs i 0
  • 安装 PyAudio 跨平台时出现 distutilscross 问题

    当我为 MIPS 嵌入式平台安装 PyAuduo 时 出现以下错误 running build Traceback most recent call last File setup py line 122 in
  • glReadPixels 通过多重采样返回零

    我正在为 iOS 编写 OpenGL 应用程序 我需要拍摄渲染场景的应用程序内屏幕截图 当我不使用多重采样时 一切正常 但是当我打开多重采样时 glReadPixels不返回正确的数据 场景绘制正确 多重采样的图形质量要好得多 我已经在 S
  • 将 C 分支代码改编为 Java 程序

    我正在尝试使用 Java 创建一个小程序来分叉两个新的子进程 这是针对初学者的编程课程 其教程是用 C 编写的 因此我正在寻求一些帮助来理解这段代码花絮试图做什么 以及使其适应基于 Java 的程序的最佳方法是什么 最终建立在它 inclu
  • 处理消息太慢,导致 UI 不稳定、无响应 - 如何使用多个线程来缓解这种情况?

    我无法让我的应用程序响应用户操作 因此 我想在多个线程之间拆分消息处理 我可以简单地创建几个线程 从所有线程中的同一个消息队列中读取数据 并让其中一个能够处理每条消息吗 如果是这样 如何实现这一点 如果没有 你能建议另一种方法来解决这个问题
  • onClick 更改列表样式

    假设我有一个简单的列表 ul li class notClicked 1 li li class notClicked 2 li li class notClicked 3 li ul 我可以通过点击一个 li 来改变所有的样式吗li除了点
  • Flash 文件上传与 php 文件上传 - 选择哪一个?

    我试图使用不带闪光灯的浏览器在 Facebook 上上传照片 但发现它不起作用 我对使用 Php 处理文件和相关问题非常有信心 并且已经完成了一些允许用户上传和管理文件 图像 文档等 的网站 但我从来没有想过上面的flash方式 我用谷歌搜
  • json 转换时忽略 DisplayName 属性

    我有一堂课如下 public class Person public string Name get set DisplayName Please Enter Your Age public int Age get set public s
  • 在 ExtJS 4 中加载和保存嵌套数据

    我有两个模型 图书属于作者 让我们调查一下与书籍数据一起从服务器发送到 ExtJs 并返回的作者数据 服务器将以下嵌套数据发送到 ExtJs success true data id 23 name JavaScript The defin
  • 使用带有管道和不带有管道的 Scikit Learn StandardScaler 进行 Keras 回归

    我正在比较两个程序的性能KerasRegressor使用 Scikit LearnStandardScaler Scikit Learn 的一个程序Pipeline和一个没有的程序Pipeline 方案一 estimators estima
  • Git 与 Perforce 的区别?

    我们有一个 Perforce 存储库 后来切换到了 Git 我们仍然有一个 perforce 中的发布分支 现在 我需要将一些 git 提交应用到 perforce 分支 根据我所读到的内容 这似乎可以通过执行 git diff 创建补丁然
  • 了解“双重释放或损坏”错误

    我正在打电话C 申请来自python脚本 操作系统 Ubuntu 14 04 如下所示 import sys subprocess run subprocess Popen app args stdout subprocess PIPE s