Возможно, вы запутались в typedefs и названии некоторых переменных.Я сделал рабочий пример, который, я надеюсь, вы можете использовать для справки.Я должен был заполнить некоторые неизвестные, скажите мне, если намерение кода отличалось от этого.
typedef struct {
int a;
float b;
} Struct1;
typedef struct {
int a;
} Struct2;
typedef struct{
int c;
Struct1 *str1;
Struct2 *str2;
} Sh_Memory;
int main(void)
{
int shmid;
Sh_Memory *shmem;
int total_a = 3;
int total_b = 3;
shmid = shmget(IPC_PRIVATE, sizeof(Sh_Memory) + total_a * sizeof(Struct1) + total_b * sizeof(Struct2), 0666);
shmem = (Sh_Memory *)shmat(shmid, 0, 0);
shmem->str1 = (Struct1 *)((void *)shmem + sizeof(Sh_Memory));
/* Init str1 */
shmem->str1[0].a = 0;
shmem->str1[0].b = 0.0;
shmem->str1[1].a = 1;
shmem->str1[1].b = 1.1;
shmem->str1[2].a = 2;
shmem->str1[2].b = 2.2;
shmem->str2 = (Struct2 *)((void *)(shmem->str1) + total_a * sizeof(Struct1));
/* Init str2 */
shmem->str2[0].a = 0;
shmem->str2[1].a = 1;
shmem->str2[2].a = 2;
/* Print str1 */
for (int i = 0; i < total_a; i++) {
printf("str1[%d] - a: %d, b: %f\n", i, shmem->str1[i].a, shmem->str1[i].b);
}
/* Print str2 */
for (int i = 0; i < total_a; i++) {
printf("str2[%d] - a: %d\n", i, shmem->str2[i].a);
}
}
Вывод:
str1[0] - a: 0, b: 0.000000
str1[1] - a: 1, b: 1.100000
str1[2] - a: 2, b: 2.200000
str2[0] - a: 0
str2[1] - a: 1
str2[2] - a: 2