Unknows player
Unknows player

Reputation: 97

How to use mmap like malloc?

I'm trying to allocate memory for 10x of my list struct then use it for my linked list but I keep getting a segmentation fault.

Valgrind

==3806== Invalid write of size 4
==3806==    at 0x4005FD: main (comp.c:14)
==3806==  Address 0xffffffffffffffff is not stack'd, malloc'd or (recently) free'd

Sample Code

#include <sys/mman.h>

typedef struct list {
    int num;
    struct list *next;
}list;

int main()
{
    list *nodes = mmap(NULL, sizeof(list) * 10, PROT_READ | PROT_WRITE, MAP_PRIVATE, -1, 0);

    nodes[0].num = 1;
    nodes[0].next = NULL;

}

Upvotes: 0

Views: 428

Answers (1)

Nate Eldredge
Nate Eldredge

Reputation: 57922

The 0xffffffffffffffff almost surely means that mmap failed. If you want to use it to allocate memory like malloc, you have to do error checking just as you would for malloc, except that you need to test the returned value against MAP_FAILED instead of NULL.

The failure is probably because you are trying to map a nonexistent file descriptor -1. This is only allowed when the MAP_ANONYMOUS flag is specified, which you did not include.

Upvotes: 3

Related Questions