gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-28 23:35:08 32 4
gpt4 key购买 nike

我已使用 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为了那个原因。您不需要做任何其他事情(更改保护位等)。但是你应该检查 munmap 的返回码。

munmap(allocation, 5000);

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

关于c - 如何释放使用 mmap 分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6979892/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com