공유메모리에 배열 할당 ...

simba210의 이미지

공유메모리를 할당하여

그곳에 구조체 배열을 저장하려고 합니다.

구조체는 대략

typedef struct {
char data[20];
int pid;
}PROC;

PROC *proc[2];

이렇게 선언하였습니다.

흠... 하나의 공유메모리에 A와 B 라는 프로그램에 대한 정보를 저장하기 위한것인데요

공유메모리에 위의 *proc[2] 변수를 선언하여 proc[0] 에는 A프로세스의 정보를 proc[1]에는 B프로세스의 정보를 저장하고자 합니다.

공유메모리에 저장하는 것이 아니라면

그냥 위의 선언만 하고 사용하면 될테지만, 공유메모리에 저장해야하기 때문에

공유메모리의 크기나 그런것들이 문제가 됩니다.

*proc[2] 변수를 공유메모리에 저장하기 위해서는 PROC 구조체*2 만큼의 크기를 할당해줘야할텐데...

세그먼트 오류가 발생하네요..

포인터배열을 선언하고 공유메모리를 할당할때 크기를 sizeof(PROC) 할 경우에는..

A와 B의 데이터가 따로 저장이 되지 않고 계속 덮어쓰기가 되네요.. 당연한거지만...

공유메모리에 구조체 포인터배열을 할당하는 방법 좀 알려주세요.

bushi의 이미지

배열의 포인터

PROC *procs = malloc(sizeof(PROC) * 2);
...
...
printf("%d %d\n", procs[0].pid, procs[1].pid);
printf("%d %d\n", procs->pid, (procs+1)->pid);

포인터의 배열

PROC *procs[2];
 
procs[0] = malloc(sizeof(PROC));
procs[1] = malloc(sizeof(PROC));
...
...
printf("%d %d\n", procs[0]->pid, procs[1]->pid);

OTL

kuma의 이미지

연속 배열이기 때문에
PROC *proc[2]; -> PROC *proc; 로 잡아야 할것 같습니다.

크기는 sizeof( PROC ) * 2 로 잡구요...