shmat
割り振りエラーが発生しました。私はメモリが不足していると言っていましたが、以前は私には起こりませんでした。 これはエラーです:shmatを実行しようとしたときに割り当てエラーが発生しました
0xffffffffffffffff error: Cannot access memory at address 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);
}
}
その混乱を整理してください:適切な書式と字下げ.C++ではなくCのように見えます.C++としてコンパイルすると、C++にタグをchengeします。 Cタグを削除してください。また、 'void *'をCのポインタにキャストしないでください。Cの_null-pointer constant_には 'NULL'マクロ、C++では' nullptr'を使います。 – Olaf
表示されたコードは、割り当てられたメモリ( 'vecBoard')にアクセスしません。何がエラーメッセージを表示するのですか? – Tsyvarev