发出 SIGINT 来停止循环时如何获取地址清理器的输出

2024-02-12

当我编译这个简单的测试程序时,我从地址清理程序中得到了明显的泄漏报告,但是当我编译相同的程序但具有无限循环时,并打破它发出的信号SIGINT我没有得到任何输出。

检查 asm 输出,malloc没有被优化掉(如果这可能的话)

这是地址清理程序的预期行为吗?我在其他开发中没有遇到这个问题。

工作示例:

#include <stdlib.h>
int main(void)
{
    char *a = malloc(1024);
    return 1;
}

不工作(用 SIGINT 杀死):

#include <stdlib.h>
int main(void)
{
    char *a = malloc(1024);
    for(;;);
    return 1;
}

编译:gcc test.c -o test -fsanitize=address

我在完整的程序中遇到这个问题,但我将其简化为这个最小的示例。


我尝试了很多方法,与exit() and abort()调用,这有效:

#include <stdlib.h>
#include <signal.h>
#include <stdio.h>
#include <setjmp.h>

jmp_buf jmpbuf;
void handler (int signum) {    
        printf("handler %d \n", signum);
        // we jump from here to main()
        // and then call return
        longjmp(jmpbuf, 1);
}

int main(int argc, char *argv[])
{
    if (setjmp(jmpbuf)) { 
        // we are in signal context here
        return 2;
    }
    signal(SIGINT, handler);
    signal(SIGTERM, handler);

    char *a = malloc(1024);
    while (argc - 1);
    return 1;
}

结果是:

> gcc file.c -fsanitize=address && timeout 1 ./a.out arg
handler 15 

=================================================================
==12970==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 1024 byte(s) in 1 object(s) allocated from:
    #0 0x7f4798c9bd99 in __interceptor_malloc /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cc:86
    #1 0x5569e64e0acd in main (/tmp/a.out+0xacd)
    #2 0x7f479881206a in __libc_start_main (/usr/lib/libc.so.6+0x2306a)

SUMMARY: AddressSanitizer: 1024 byte(s) leaked in 1 allocation(s).

我猜想地址清理函数是在 main 返回后执行的。

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

发出 SIGINT 来停止循环时如何获取地址清理器的输出 的相关文章

  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • 如何验证文件名称在 Windows 中是否有效?

    是否有一个 Windows API 函数可以将字符串值传递给该函数 该函数将返回一个指示文件名是否有效的值 我需要验证文件名是否有效 并且我正在寻找一种简单的方法来完成此操作 而无需重新发明轮子 我正在直接使用 C 但针对的是 Win32
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke

随机推荐

  • xsd.exe 自动实现的属性

    是否可以强制 xsd exe 生成自动实现的属性 而不是 xsd exe 生成的丑陋的手动实现的代码 public abstract partial class SomeClass private string valueField
  • ETrade API无人值守认证

    背景ETrade 身份验证系统让我创建一个 RequestToken 然后执行一个授权 URL 这将打开一个 ETrade 页面 用户登录以授权其帐户上的活动 他们会收到一个 PIN 码 并将其输入到我的应用程序中 我使用 RequestT
  • izpack安装后执行脚本

    我已经制作了包含 jboss 的 jar 文件 我想在 jar 解压并完全安装在我的计算机上时启动我的 Web 应用程序 我应该在 izpack 中的哪里编写脚本或代码或 xml 标记 以便安装应用程序后standalone sh 自动运行
  • 将32位dll转换为64位dll

    当我尝试在 64 位应用程序中使用它时 我有 32 位编译的 dll 但它无法加载 所以我想将dll转换为64位 当应用程序的平台从 任何CPU 或 x64 更改为 x86 时 它工作正常 但我想在 64 位下使用它 因为我要从 ASP 页
  • 如何更改Android中的日期时间语言

    我们如何在不更改设备语言的情况下更改 Android 中的日期 时间语言 下面是我当前的代码 下面的代码根据设备语言而变化 但我想在不更改设备语言设置的情况下进行更改 公共静态字符串格式时间 日期时间 String timeFormat U
  • 使用 Windows 服务实现计划作业的最佳方式是什么

    我有一个偶尔在晚上运行的数据库作业 我需要一个 Windows 服务来定期轮询数据库 以便在 SQL 作业完成后做更多的工作 我正在寻找一个可靠的示例来编写一个调度程序 该调度程序可以优雅地失败而不会导致服务崩溃 只需将其设置为计划任务即可
  • Keras Sequential 不提供输入形状

    我目前有一个 keras 模型 如下所示 model keras Sequential model add keras layers Dense 100 activation tf nn relu model add keras layer
  • 交叉编译 PHP [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已经下载了 PHP 5 4 0 源代码 将其解压并移至源文件夹中 我做了一个配置 configure build x86 64 unknown li
  • 将 Matlab Simulink 模型保存为带有紧密边界框的 PDF

    给定一个 Simulink 框图 模型 我想生成一个 屏幕截图 以便稍后在 LaTeX 文档中使用 我希望这个屏幕截图是带有紧密边框的 PDF 矢量图形 gt pdflatex 我的意思是图表周围没有不必要的空白 我搜索了网络 搜索了 st
  • 如何从jquery移动动态页面中的按钮获取事件

    我使用jquery mobile创建了一个动态页面 创建此页面后如何获取事件 我还需要从此按钮发出警报 这是我的代码 test on click function var newPage div div h1 TEST h1 div div
  • Android:使用多维字符串数组作为列表

    在我的 android 列表页面 活动中 我有 2 个文本字段 一个主字段和一个子字段 一个在上面 但当它为它创建数组字符串时 我只看到带有一段文本的示例
  • R Studio - 全局环境中的数据在启动时自动加载 - 如何删除

    退出 R Studio 时 通常会提示我Save workspace image to RData 我不小心点击了Save在某些时候 现在当我打开 R Studio 时 我的全局环境会自动加载多个函数和数据集 现在 当我启动 R Studi
  • 来自远程目录的 Java Class.forName()

    我目前正在使用加载Java类Class forName 加载它 clazz Class forName interfaces MyClass 但现在我想从不同的目录加载类 我尝试通过设置类路径 clazz Class forName cp
  • 如何使用C++在后台跟踪剪贴板变化

    我需要在后台应用程序中处理剪贴板的内容 我怎样才能做到这一点 我需要一个每次更改剪贴板时都会调用的事件 应用程序从哪个位置复制并不重要 我知道阅读和写作的功能 例如GetClipboardData and SetClipboardData
  • git中远程仓库和集中仓库是同一个东西吗?

    它们似乎是同义词 但我还不能说清楚 基于 Subversion 与 DVCS 的争论here https softwareengineering stackexchange com questions 35074 im a subversi
  • PHP 7 和严格的“资源”类型

    PHP 7 支持资源的严格类型吗 如果是这样 怎么办 例如 declare strict types 1 ch curl init test ch function test resource ch 上面会报错 致命错误 未捕获类型错误 传
  • 我如何知道 ELF 目标文件中的调试信息是什么类型?

    我有一个 ELF 目标文件 我想知道它包含哪种类型的调试信息 它是用针对 PPC 架构的 Diab 编译器 C 源代码 编译的 我很确定它是用调试符号构建的 我尝试使用提取调试信息dwarfdump但我不工作 所以我猜调试信息不 是 DWA
  • 数据表未在 angularjs 中重新加载

    我有一个要求 我必须将特定产品添加到数据表并重新绑定数据表 以便更新其计数 我正在使用 MVC 和 angularjs 1 6 2 我正在创建数据表 如下所示 table class table manage user table offe
  • 将多行输出重定向到多个文件

    我有一个 URL 列表 并且想确定什么是目录 什么不是 https www example com folder https www example com folder9 https www example com folder file
  • 发出 SIGINT 来停止循环时如何获取地址清理器的输出

    当我编译这个简单的测试程序时 我从地址清理程序中得到了明显的泄漏报告 但是当我编译相同的程序但具有无限循环时 并打破它发出的信号SIGINT我没有得到任何输出 检查 asm 输出 malloc没有被优化掉 如果这可能的话 这是地址清理程序的