gpt4 book ai didi

c - 段错误 : Trying to write array of strings in shared memory c

转载 作者:太空宇宙 更新时间:2023-11-04 01:50:45 26 4
gpt4 key购买 nike

我正在尝试实现一个基本程序,该程序在共享内存中写入一个字符串数组,然后从那里读取它。我经常出现段错误。我真的不知道哪里出了问题(我真的搞砸了)因为我是第一次使用共享内存。任何帮助将不胜感激,谢谢!

代码:

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char *argv[])
{
int shmid;
int i = 0;
key_t key = 123;
char (*array)[100][50];

shmid = shmget(key, 100 * 50, IPC_CREAT | 0666);

array = (char *)shmat(shmid, 0, 0);

// array = malloc(sizeof(int)*count);

for (i = 0; i < 10; i++)
{
strcpy(array[i], "arrayvalues");
}

for (i = 0; i < 10; i++)
{
printf("\n%s---\n", array[i]);
}

printf("\nWritting to memory succesful[+]\n");

shmid = shmget(key, 1024, IPC_CREAT | 0666);

array = (char *)shmat(shmid, 0, 0);

for (i = 0; i < 9; i++)
{
printf("\n%s---\n", array[i]);
}

printf("\nRead to memory succesful[+]\n");

shmdt((void *)array);
// shmctl(shmid, IPC_RMID, NULL);

return 0;
}

编辑:它仅将数组[0] 值保存在共享内存中。

最佳答案

看来段错误与使用共享内存无关。实际上,您在这里声明的 (*array)[100][50] 是指向二维数组的指针。但是在访问相同的内容时,您将其视为普通的二维数组变量。因此,如果您像 (*array)[i] 那样访问它,那么就没有内存冲突。

*array 指向二维数组,而 array 只是指向数组的指针所在的位置。您可以尝试像 (*array)[i] 这样填充数组,然后尝试循环打印 array[i] 。第一个元素即 array[0] 将是有效的,因为索引 0 仅表示打印 *array。但是从索引 1 开始,它将尝试访问可能不是有效位置的位置 *(array+1)。这会导致段错误。但是 (*array)[i] 意味着访问位置 (*array) + 1 这是有效的,因为数组是在传染性内存位置分配的

关于c - 段错误 : Trying to write array of strings in shared memory c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43525108/

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