Я хочу инициализировать разделяемую память и записать в нее структуру. Эта структура будет позже разделена между процессами. Начиная с очень простого кода:
typedef struct shm_mem {
char data[2100];
}shm_mem;
int main() {
// Open and map the shared memory
int fd = shm_open("/shm_example", O_CREAT | O_RDWR | O_EXCL, 0600);
ftruncate(fd, 4200);
shm_mem *ptr = (shm_mem *)mmap(NULL, 4200, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
printf("Obtained shared memory at address %p\n", ptr);
// Need an actual struct and THEN copy it into the memory I think
shm_mem actual;
strcpy(actual.data, "Sample data blaj balj");
printf("In actual, data = %s\n", actual.data);
memcpy(ptr, &actual, sizeof(actual));
return 0;
}
Но это продолжает получать SIGSEGV:
Invalid write of size 8
==4062== at 0x1088AF: main (test_proxy.c:32)
==4062== Address 0xffffffffffffffff is not stack'd, malloc'd or (recently) free'd
==4062==
==4062==
==4062== Process terminating with default action of signal 11 (SIGSEGV)
==4062== Access not within mapped region at address 0xFFFFFFFFFFFFFFFF
==4062== at 0x1088AF: main (test_proxy.c:32)
, где строка 32 - строка memcpy.
Не могу понять почему. Пожалуйста, помогите мне.