[英]C++: Array and 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]’
我的任務有什么問題?
你應該將arr
聲明為指針,而不是數組:
int* arr;
您不能指定指向數組的指針, shmat()
返回指針。
刪除此行:
int arr[10];
並將對shmat()的調用更改為:
int* arr = (int*)shmat(shm_id, NULL, 0);
指針變量可以用作數組,因此arr[0]=101
仍然可以工作。
(正如@Andrew評論的那樣,最好在變量首次使用時聲明變量。這樣可以降低使用未初始化變量的風險。)
當你編寫arr [10]時,你在堆棧上分配一個元素數組。 隱含地這意味着&arr [0](確實是指向arr中第一個元素的指針)的值不能改變。 如果要將shmat的內容復制到數組arr中,則需要使用memcpy()
或類似的方法來正確設置arr的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.