如何释放使用 mmap 分配的内存?

2024-03-20

我已经使用分配代码mmap,但由于分段错误而无法释放它。我已经做好了mprotect - PROT_WRITE使其可写,但我仍然无法释放它。我的代码:

 1 #include <stdio.h>
 2 #include <memory.h>
 3 #include <stdlib.h>
 4 #include <unistd.h>
 5 #include <sys/mman.h>
 6 #include <sys/types.h>
 7 #include <fcntl.h>
 8 
 9 int main()
10 {
11  void * allocation;
12  size_t size;
13  static int devZerofd = -1;
14 
15  if ( devZerofd == -1 ) {
16                 devZerofd = open("/dev/zero", O_RDWR);
17                 if ( devZerofd < 0 )
18                         perror("open() on /dev/zero failed");
19 }
20 
21  allocation = (caddr_t) mmap(0, 5000, PROT_READ|PROT_NONE, MAP_PRIVATE, devZerofd,  0);
22 
23  if ( allocation == (caddr_t)-1 )
24                 fprintf(stderr, "mmap() failed ");
25 
26  if ( mprotect((caddr_t)allocation, 5000, PROT_WRITE) < 0 )
27         fprintf(stderr, "mprotect failed");
28  else
29         printf("mprotect done: memory allocated at address %u\n",allocation);
30 
31  strcpy(allocation,"Hello, how are you");
32  puts(allocation);
33 
34  if ( mprotect((caddr_t)allocation, 5000, PROT_WRITE) < 0 )
35         fprintf(stderr, "mprotect failed");
36 
37  free(allocation);
38 
39 }
40 
41 

你需要使用munmap http://pubs.opengroup.org/onlinepubs/9699919799/functions/munmap.html为了那个原因。您不需要执行任何其他操作(更改保护位等)。但你应该检查返回码munmap.

munmap(allocation, 5000);

free(3)只能用于释放通过分配的内存malloc(3).

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

如何释放使用 mmap 分配的内存? 的相关文章

  • MEX 文件中的断言导致 Matlab 崩溃

    我正在使用mxAssert 宏定义为matrix h在我的 C 代码中 mex 可以完美编译 当我调用的 mex 代码中违反断言时 该断言不会导致我的程序崩溃 而是导致 Matlab 本身崩溃 我错过了什么吗 这是有意的行为吗 当我查看 M
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 通过不同 DLL 或 EXE 中的指针或引用访问 STL 对象时发生访问冲突

    我在使用旧版 VC6 时遇到以下问题 我只是无法切换到现代编译器 因为我正在处理遗留代码库 http support microsoft com kb 172396 http support microsoft com kb 172396
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • std::bind 重载解析

    下面的代码工作正常 include
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 无法使用 Ninject 将依赖项注入到从 Angular 服务调用的 ASP.NET Web API 控制器中

    我将 Ninject 与 ASP NET MVC 4 一起使用 我正在使用存储库 并希望进行构造函数注入以将存储库传递给其中一个控制器 这是实现 StatTracker 接口的上下文对象 EntityFramework public cla
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12

随机推荐

  • 定义一个大的vba字符串的最佳方法 - 即heredoc等效?

    我应该如何在VBA中定义大字符串 还有比下面这样的编码更好的方法吗 Dim largeString as String largeString This is a long block of text that I want to fill
  • 如何在 Swift 中对这个自定义 UITextField 进行单元测试?

    我创建了一个像这样的自定义 UITextField import Foundation import UIKit class NoZeroTextField UITextField UITextFieldDelegate required
  • 如何在 Angular 5 中为每个 HTTP 请求显示微调器?

    我是 Angular 5 的新手 如何编写一个通用函数来为 Angular 5 中的每个 HTTP 请求显示微调器 请帮我实现这个 您可以使用角度Http拦截器 https angular io api common http HttpIn
  • GStreamer Tee(多路复用器)

    我正在尝试将视频流 来自我的网络摄像头 存储到 MKV 和 FLV 文件中 这意味着我必须在 h264 编码后分割视频和音频管道 并使用不同的复用器复用每个路径 这就是我想象的它应该如何工作 gt queue gt matroskamux
  • 监听/处理 JPanel 事件

    先生们女士们晚上好 我有一个无法解决的 Java Swing 问题 也许你可以帮助我 这里是 我有一个使用 BorderLayout 的 JFrame 和许多 JPanel 每次我需要建立一个新屏幕 即从主菜单中 单击搜索按钮时 转到搜索菜
  • 什么是数组到指针的转换又名。衰变?

    什么是数组到指针的转换又名 衰变 和数组指针有关系吗 据说数组 衰变 成指针 C 数组声明为int numbers 5 不能被重新指向 即你不能说numbers 0x5a5aff23 更重要的是 衰变一词意味着类型和维度的损失 number
  • 使用 Ajax 的 Jquery 日期选择器无法正常工作

    我的网站有很多类别 每个类别页面都有自己的帖子 在这里我使用了 jQuery datepicker 如果用户想查看 8 月 20 日的帖子 他们可以单击日历上的特定日期并查看日期帖子 另一件事 如果我打开一个类别 则应该只显示今天的帖子 请
  • 我想使用 mpdf 在 PDF 中设置页眉和页脚

    我已经使用生成了 PDFmpdfCodeIgniter 中的库 我想附加带有适当边距的页眉图像和页脚图像 我创建了一个代码 但页眉和页脚重叠 controller this gt load gt library m pdf param A4
  • 从 C 中的 UTF8 字符串中删除变音符号

    我正在编写一个 C 程序来搜索数据库中的大量 UTF 8 字符串 其中一些字符串包含带教义的英文字符 例如重音符号等 搜索字符串是由用户输入的 因此很可能不包含此类字符 有没有一种方法 函数 库等 可以从字符串中删除这些字符 或者只是执行不
  • unicharset_extractor:找不到命令

    我想使用超正方体创建新的列车数据 因此 请按照以下网站中提到的步骤进行操作 https blog cedric ws how to train tesseract 301 https blog cedric ws how to train
  • Scriptom Groovy 格式化 Excel 示例

    我正在寻找一些 Groovy 对 Excel 文档执行基本格式化命令的示例 我还想知道在哪里可以找到这些命令的存储库 你会怎样 插入一行 将单元格格式设置为短日期 时间等 将整列或整行加粗 怎么样 POI 3 9 假设您有一个输入 XLS
  • JMESPath - 连接嵌套数组中的项目

    我有一个 JSON key processId 29231 fields attachment id 79572 filename File1 png id 74620 filename File2 docx id 79072 filena
  • WinForms中发生关闭事件时如何保存数据?

    我想要一个消息框来询问表单关闭事件上未保存的数据 如果用户选择 是 则将数据保存在文本文件中并退出应用程序 如果用户选择不保存而不退出应用程序 我尝试了以下代码 但它不会关闭应用程序并使消息框一次又一次出现 public void Save
  • 带有 upstart 和 syslog 的 Ubuntu docker 容器

    四处搜寻后 我仍然很困惑你是否可以拥有码头集装箱运行 Ubuntu 并运行初始化系统 暴发户 and syslog 或不 我知道 docker 容器是用于运行单个进程而不是完整的操作系统 但我的用例是在各种 Linux 发行版上测试守护进程
  • 打印同一行两个字符串之间的文本

    我已经搜索了很长时间 但未能找到解决我的问题的有效答案 我从 HTML 文件中提取了一行sed 162 d skinlist html 其中包含文本 a href skin dwarf red beard 734 title Dwarf R
  • python.exe:没有名为 pyuic5 的模块

    我想将 ui 文件转换为 py 但 pyuic5 无法识别 当我进入 python 目录时 会出现此错误消息 如何修复这个错误 更通用的选项是 python m PyQt5 uic pyuic filename ui o filename
  • SPFileVersionCollection - 为什么版本按混合顺序排序?

    SPFileVersionCollection 和 SPListItemVersionCollection 版本控制对我来说似乎不一致 不一致对我来说不是问题 但排序顺序是问题 SPListItemVersionCollection 我可以
  • 重命名变量时使用 numlist 循环

    我正在尝试使用 tidyverse dplyr 重命名 R 中的两种类型的变量 第一个类型 var a year 我想将其重命名为 sample year 第二种变量 var b 7 我想将其重命名为 index year 第二个变量 va
  • 检测 SharePoint 文件是否打开

    第一次在这里发帖 如果我偏离了任何指导方针 我深表歉意 这是我的挑战 我有一个保存到 SharePoint 的状态跟踪文件 宏将打开此状态跟踪器 记录一些信息 保存并关闭文件 我试图包含一些代码来检测另一个用户是否打开了该状态文件 否 则当
  • 如何释放使用 mmap 分配的内存?

    我已经使用分配代码mmap 但由于分段错误而无法释放它 我已经做好了mprotect PROT WRITE使其可写 但我仍然无法释放它 我的代码 1 include