我正在尝试创建一块共享内存以共享一个数组,这是我的例子:
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]’
我的任务有什么问题?
答案 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的内容。