He asignado código usando mmap, pero no puedo liberarlo debido a un error de segmentación. He hecho mprotect - PROT_WRITE para que se pueda escribir, pero aún no puedo liberarlo.¿Cómo liberar memoria asignada usando mmap?
Por favor, ayúdame.
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
use munmap function its syntex es "int munmap (void * addr, size_t len);" –
Gracias, sí, tengo uso y está funcionando :) – kingsmasher1