gpt4 book ai didi

C : shmget with a 2D array

转载 作者:太空狗 更新时间:2023-10-29 12:20:42 32 4
gpt4 key购买 nike

我尝试将 shmget 与二维数组一起使用。这是我的代码:

char **array;
key_t key;
int size;
int shm_id;
int i = 0;
void *addr;

key = // here I get the key with ftok()
size = (21 * sizeof(char *)) + (21 * sizeof(char **));
shm_id = // here I get the shmid with shmget()

if (shm_id == -1) // Creation
{
array = (char **)shmat(shm_id, NULL, SHM_R | SHM_W);
while (i != 20)
{
array[i] = memset(array[i], ' ', 20);
array[i][20] = '\0';
i++;
}
array[i] = NULL;
shm_id = // here I get the shmid with the flag IPC_CREAT to create the shared memory
addr = shmat(shm_id, NULL, SHM_R | SHM_W);
}

但是我在行“array[i] = memset(array[i], ' ', 20);”中遇到了段错误

我做错了什么?

最佳答案

您应该首先检查shmget 是否成功。如果共享内存分配失败,那么你就不能使用共享内存! ;-)喜欢:

If ( shm_id = shmget(.......) == -1) {
exit(1);
}
else {
/* proceed with your work*/
}

对于 shmat 也是如此。

shmget 返回 void*。您不能将它分配给 char** 并像二维数组一样使用它。事实上,一个 char* 在逻辑上可以很容易地作为一个二维数组来处理。

关于C : shmget with a 2D array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9795577/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com