#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. Я такой тупой, чувак! Спасибо, я изменил ДЛИНУ на размер(ячейка)*ДЛИНА, и это работает! Спасибо!