我正尝试创建一个包含三个整数和一个数组的共享内存段。段被创建并附加了一个指针,但是当我尝试访问变量的值时(无论是更改,打印等),我都会遇到段错误。如何访问共享内存中的变量
这里是我尝试的代码:我试图通过解引用的指针结构访问共享存储器,但得到了一个分割每次故障
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>
#define SIZE 10
int* shm_front;
int* shm_end;
int* shm_count;
int* shm_array;
int shm_size = 3*sizeof(int) + sizeof(int[SIZE]);
int main(int argc, char* argsv[])
{
int shmid;
//create shared memory segment
if((shmid = shmget(IPC_PRIVATE, shm_size, 0644)) == -1)
{
printf("error in shmget");
exit(1);
}
//obtain the pointer to the segment
if((shm_front = (int*)shmat(shmid, (void *)0, 0)) == (void *)-1)
{
printf("error in shmat");
exit(1);
}
//move down the segment to set the other pointers
shm_end = shm_front + 1;
shm_count = shm_front + 2;
shm_array = shm_front + 3;
//tests on shm
*shm_end = 10; //gives segmentation fault
printf("\n%d", *shm_end); //gives segmentation fault
//clean-up
//get rid of shared memory
shmdt(shm_front);
shmctl(shmid, IPC_RMID, NULL);
printf("\n\n");
return 0;
}
。
谢谢大家,现在没有分段错误。
试图在此发布建议,但格式看起来很可怕..请参阅下面的可能答案。 –