簡體   English   中英

使用shmat時,從void *類型分配int * [10]

[英]Assigning int *[10] from type void* when using shmat

我正在看一些示例代碼,試圖弄清楚這個問題,但是被卡住了。 我只是試圖創建一個10個整數的緩沖區,並讓我的共享內存指針指向該緩沖區。 有人可以幫助我了解這段代碼的實際作用以及我出了什么問題嗎?

int shmem_id;       /* shared memory identifier */
int *shmem_ptr[BUFSIZE];     /* pointer to shared segment */
key_t key = 4455;         /* a key... */
int size = 2048;        /* 2k memory */
int flag = 1023;        /* permissions */
char keystr[10];
sprintf (keystr, "%d", key);
shmem_id = shmget (key, size, flag);    /* create a shared memory segment */
shmem_ptr = shmat (shmem_id, (void *) NULL, 1023);

實際上,我希望它包含10個結構項的緩沖區。

typedef struct widget{
   char color[10];
};

您的聲明:

int *shmem_ptr[BUFSIZE];

聲明shmem_ptr是一個整數指針數組。 您只需要一個指向整數的指針,因此它應該是:

int *shmem_ptr;

如果內存指向widget結構,則可以執行以下操作:

typedef struct widget {
    char color[10];
} widget;

widget *shmem_ptr;

聲明指針時不需要聲明長度。 該長度是在創建共享內存塊時指定的,而不是在附加程序中指定的長度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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