Mam przydzielony kod za pomocą mmap, ale nie można go zwolnić z powodu błędu segmentacji. Zrobiłem mprotect - PROT_WRITE, aby było możliwe do zapisu, ale nadal nie mogę go zwolnić.Jak zwolnić pamięć za pomocą mmap?
Proszę, pomóż mi.
enter code here
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
użyj funkcji munmap jej syntex to "int munmap (void * addr, size_t len);" –
Dziękuję, tak, mam zastosowanie i działa :) – kingsmasher1