Общая память с массивом структур для имитации матрицы в C

#c #struct #ipc

Вопрос:

Я пытаюсь заполнить поле «ячейка» общего массива структур»*», но я продолжаю получать ошибку ошибки сегментации, связанную с таблицей. Я не понимаю, как используется общая память, но я не могу понять, в чем ошибка. Что мне нужно сделать, так это распечатать карту, но сначала мне нужна общая память для работы. Спасибо всем, кто мне поможет ^^

 #include <stdio.h>
#include <sys/shm.h>
#define WIDTH 60
#define HEIGHT 20
#define LENGTH WIDTH*HEIGHT

typedef struct _Cell{
    int passthroughNum;
    int capacity;
    double passthroughTime;
    char cell;
} cell;

int main() {
    int i,shmap_id;
    char symbol = '*';
    cell *map;

    if((shmap_id = shmget(IPC_PRIVATE, LENGTH, IPC_CREAT | 0666)) == -1) {
        perror("shmget (map)");
    }
    map = (cell *)shmat(shmap_id, NULL, 0);
    if(map == (cell *)(-1)) {
        perror("shmat (map)");
    } 
    for(i=0;i<LENGTH;i  ) {
        map[i].cell = symbol;
    }

    return(0);
}
 

Комментарии:

1. размер ячейки не равен одному байту, поэтому при сопоставлении байтов ДЛИНЫ вам не хватит места для ячеек ДЛИНЫ.

2. Я такой тупой, чувак! Спасибо, я изменил ДЛИНУ на размер(ячейка)*ДЛИНА, и это работает! Спасибо!