当我试图做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/

10-10 17:48