3 개의 정수와 배열을 포함하는 공유 메모리 세그먼트를 만들려고합니다. 세그먼트가 만들어지고 포인터가 첨부되지만 변수 (변경, 인쇄 등)의 값에 액세스하려고하면 세그먼트 화 오류가 발생합니다.공유 메모리의 변수에 액세스하는 방법
#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;
}
내가 구조체에 대한 포인터를 역 참조하여 공유 메모리에 접근했지만, 세그먼트마다 고장 가지고 : 여기
내가 노력 코드입니다.감사합니다. 이제 모든 세그먼트 오류가 발생하지 않았습니다.
여기에 의견을 올리려고했지만 서식이 끔찍한 것으로 보입니다. 아래에서 가능한 답변을 참조하십시오. –