Segfault uzywajaz mmap

0

Witam,

mam problem podczas zapisywania obiektów do pliku uzywając memory mappingu. Stworzyłem sobię klasę i chciałbym zapisać ją do pliku uzywajac mmap, ale za kazdym razem jak to robie, dostaje Segmentation fault, dlaczego?

Oto kod:

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>

using namespace std;

class klasa {
public:
    string nazwa;
    int numer;
};

int main(int argc, char* const argv[]) {
    int fd;

    fd = open ("plik", O_RDWR | O_CREAT | O_TRUNC,S_IRWXU);
    lseek(fd, sizeof(klasa) + 1, SEEK_SET);

    write(fd, "", 1);
    lseek(fd, 0, SEEK_SET);

    klasa* tmp = (klasa* )mmap(0, sizeof(klasa), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

    close(fd);

    tmp->nazwa = "abc";
    tmp->numer = 3;


    munmap (tmp, sizeof(klasa));





    return 0;
}

0

dostaje Segmentation fault, dlaczego?

Dlatego, że w ten sposób nie tworzy się klas. To, że sobie zrzutujesz jakiś wskaźnik na klasa*, nie oznacza, że obiekt jest poprawnie stworzony - brak wywołania konstruktora, który by poprawnie skonstruował obiekt nazwa. Poczytaj sobie o placement new, choć nie wiem, czy to ma jakieś zastosowanie/sens w tym przypadku.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.