C ++:数组和共享内存

时间:2011-03-09 14:32:29

标签: c++ arrays shared-memory

我正在尝试创建一块共享内存以共享一个数组,这是我的例子:

int main(){
    key_t key;
    int shm_id;
    int arr[10];

    key=ftok("~/.bashrc",1);

    shm_id = shmget(key, 10*sizeof(int), 0666 | IPC_CREAT);

    arr = (int*)shmat(shm_id, NULL, 0);

    arr[0]=101;
    printf("%d\n",arr[0]);


}

编译时,我收到以下错误:

error: incompatible types in assignment of ‘int*’ to ‘int [10]’

我的任务有什么问题?

3 个答案:

答案 0 :(得分:7)

您应该将arr声明为指针,而不是数组:

int* arr;

您无法为数组指定指针,shmat()会返回指针。

答案 1 :(得分:2)

删除此行:

int arr[10];

并将对shmat()的调用更改为:

int* arr = (int*)shmat(shm_id, NULL, 0);

指针变量可以用作数组,因此arr[0]=101仍然有效。

(正如@Andrew评论的那样,最好在变量首次使用时声明变量。这样可以降低使用未初始化变量的风险。)

答案 2 :(得分:1)

当你编写arr [10]时,你会在堆栈上分配一个元素数组。隐含地这意味着& arr [0](实际上是指向arr中第一个元素的指针)的值不能改变。如果要将shmat的内容复制到数组arr中,则需要使用memcpy()或类似的方法来正确设置arr的内容。