我的数据结构如下:
struct s1{
unsigned char* ptr;//points to an element in the shared memory
};
struct s1* s1Arr;
我分配了一个共享内存块,指向它的指针是:
unsigned char* shm_ptr.
我有一个s1数组,其元素数与我分配的shm_ptr数组中的元素数相同。
//point all the ptr elements of the struct to the shared memory elements(parallel array)
for(i = 0; i < count; i++)
{
shm_ptr[i] = 99;
s1Arr[i].ptr = &shm_ptr[i];
printf("val=%d\n". *s1Arr[i].ptr);
}
当我去打印* s1Arr [i] .ptr时,它只打印i,其中i为0,1 ...而应该打印99。 关于我做错了什么的任何想法?
我知道共享内存正在运行,因为我试图从另一个进程访问它。
void* allocArray_shared(int elementCount, int elementByteSize, int* shmid, key_t key)
{
printf("allocshared errno=%d\n", errno);
//size of entire array(cols*rows* byte size + row pointers)
int array_size = elementByteSize * elementCount;
//Allocate enough space for all elements + row pointers
*shmid = shmget(key, array_size, 0666 | IPC_CREAT);
char * arr = (char*)shmat(*shmid, NULL, 0);
if(!arr) return NULL;
printf("allocshared end errno=%d\n", errno);
//Return the pointer to the first row pointer
return (void*)arr;
}
编辑: 发现问题..用相同的密钥分配多个共享内存段,因此读/写重叠......呃......
答案 0 :(得分:1)
我使用此代码显示99次5次。我认为唯一的变化是我从结构数组声明的开头删除了关键字struct
(它是struct s1 * s1Arr
)。
编辑:我重新使用了struct
关键字并获得了相同的结果,所以我真的不知道为什么我的结果与您的结果不同。
struct s1
{
unsigned char * ptr; //points to an element in the shared memory
};
s1 * s1Arr = new s1[5];
unsigned char * shm_ptr = new unsigned char[5];
for(int i = 0; i < 5; i++)
{
shm_ptr[i] = 99;
s1Arr[i].ptr = &shm_ptr[i];
cout << ((int)*s1Arr[i].ptr) << "\n";
}