簡體   English   中英

C ++:數組和共享內存

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM