当我试图做shmat
时,我得到一个分配错误,告诉我我无法访问内存,这在我之前没有发生过,我真的不知道该怎么做。
这是错误:
0xffffffffffffffff错误:无法访问地址为0xffffffffffffffff的内存
而wiered的事情是vecBoard
被分配到进程映射区域,只有当触发shmat
时才会变得疯狂。谢谢大家!
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/fcntl.h>
#include <errno.h>
#include <fcntl.h>
#include <time.h>
#include <signal.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#define SHM_SIZE 4096
#define FLAGS IPC_CREAT
#define COLUMNS 8
#define ROWS 8
key_t key;
int main()
{
char* vecBoard;
// Creating shared memory :
if ((key = ftok("ex31.c",'k')) == -1)
{
perror("ftok");
exit(1);
}
int shm_id;
shm_id=shmget(key,SHM_SIZE,FLAGS);
if(shm_id==-1)
{
printf("error creating shared memory\n");
exit(0);
}
printf("the shared memory segment ID is: %d\n",shm_id);
vecBoard = (char *)shmat(shm_id,0,0);
if((vecBoard = (char *)shmat(shm_id,0,0)) == (char*)-1)
{
printf("error in attaching to the shared memory\n");
exit(0);
}
}
最佳答案
所示代码为同一内存段调用shmat
()。
这显然是错的。
关于c - 尝试执行shmat时分配错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37089080/