मैंने एमएमएपी का उपयोग करके कोड आवंटित किया है, लेकिन सेगमेंटेशन गलती के कारण इसे मुक्त करने में असमर्थ है। मैंने mprotect किया है - PROT_WRITE इसे लिखने योग्य बनाने के लिए, लेकिन फिर भी मैं इसे मुक्त करने में असमर्थ हूं।mmap का उपयोग करके आवंटित स्मृति को कैसे मुक्त करें?
कृपया मेरी मदद करें।
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
मनमैप फ़ंक्शन का उपयोग अपने सिंटेक्स का है "int munmap (शून्य * addr, size_t len);" –
धन्यवाद, हाँ मैंने उपयोग किया है और यह काम कर रहा है :) – kingsmasher1