c - 将共享内存与包含数组的结构一起使用
问题描述
我正在做一个大学项目,我被要求在进程之间创建一种游戏:它们必须捕获放置在共享矩阵上的一些标志,类似于棋盘。我使用结构体和单元格作为矩阵来表示电路板,但是在分配共享内存段后,我无法正确附加它,因为当我尝试访问矩阵单元格时出现“分段错误”,实际上我看到矩阵指针是零。那么,分配整块板后如何附加矩阵呢?
这是我编写的用于分配/附加板的函数的代码:
int allocate_board(int width, int height){
size_t size;
int shm_id;
key_t shm_key;
char current_path[PATH_MAX];
getcwd(current_path, sizeof(current_path));
shm_key = ftok(current_path, 1);
size = sizeof(board) + ( sizeof(cell) * height * width );
shm_id = shmget(shm_key, size, IPC_CREAT | 0660);
if ( shm_id < 0 ){
printf("Cannot allocate the game board, aborting.\n");
exit(1);
}
return shm_id;
}
board* get_board(int shm_id){
void* shm_ptr;
board* game_board;
shm_ptr = shmat(shm_id, NULL, 0);
if ( (int)shm_ptr == -1 ){
printf("Cannot attach the shared memory segment, aborting.\n");
printf("Reported error: %s.\n", strerror(errno));
exit(2);
}
game_board = (board *)shm_ptr;
return game_board;
}
这是结构定义:
typedef struct {
entity_type_t entity_type;
owner_id_t owner_id;
float flag_score;
} cell;
typedef struct {
int width;
int height;
sem_t* semaphore;
cell** cells;
} board;
以下是我尝试访问董事会单元的方法:
game_board->width = some_width;
game_board->height = some_height;
game_board->cells[0][0].flag_score = some_score;
解决方案
推荐阅读
- java - 如何在 groovy 和 SoapUI 中生成带有时间戳的新 txt 文件?
- python - 如何使用 Python 在 Win10 上正确解包 RAW 套接字?
- asp.net - 如何在运行时发现 Razor 类库以加载 Razor 视图?
- matplotlib - 绘制洗牌数组numpy
- css - Unicode 表情符号在浏览器中不可见(显示一个正方形)
- azure - 如何跨订阅移动应用服务证书与 Web 应用及其证书
- omnet++ - 在omnet++中运算和交换复数数据
- python - 名称错误:未定义全局名称“r”
- php - php中的empty()、isset()和is_null()函数有什么区别?
- php - 为“escapeshellcmd”修改我的 PHP 正则表达式