gpt4 book ai didi

c - 将 2d 动态 int 数组解析为共享内存

转载 作者:行者123 更新时间:2023-12-04 19:00:10 24 4
gpt4 key购买 nike

我试图构建一个程序,通过使用共享内存将二维动态数组解析到其他程序。我搜索了很多,但我有点困惑,因为我不熟悉这个。
到目前为止我的代码:

int main (int argc, char* argv []){
int rows,columns;
if( argc < 3 ){
printf("Need The size of the 2d array\n");
return 0;
}
rows = atoi(argv[1]);
columns = atoi(argv[2]);

time_t t;
srand((unsigned) time(&t));

key_t key = ftok(".",'a');
size_t size = sizeof(key_t) + (rows * columns + 2 + rows) * sizeof(int);
int shmid = shmget(key,size,IPC_CREAT|IPC_EXCL|S_IRWXU);
int *memory = shmat(shmid, NULL, 0);
printf("Shared Memory Key: %d\n", key);

int *argsflag = memory;
int *resflag= memory + 1;
int *res = memory + 2;

int **array = (int **) memory + (rows*columns);

for(int i = 0; i < rows ; i++) {
for(int j = 0; j < columns; j++) {
array[i][j] = rand() % 100;
}
}
for(int i = 0; i < rows ; i++) {
for(int j = 0; j < columns; j++) {
printf("%d ",array[i][j]);
}
printf("\n");
}


shmctl(shmid,IPC_RMID,NULL);
shmdt(memory);
return(0);
}

我遇到段错误(核心转储),我不知道为什么。另外通过搜索,我找到了 struct 的解决方案,但我不知道如何构建它。

最佳答案

您不能拥有 int**指向一个二维数组。它只能指向 int* 的一维数组中的第一个元素.

此外,memory + (rows*columns) 的逻辑是什么? ?您最终将指针设置为数组的最后一项,而不是第一项。

试试这个:

void* memory = shmat( ... 
...
int (*array)[columns] = memory;
...
array[i][j] = ... ;

在哪里 int (*array)[columns]是一个数组指针,它最终指向二维数组中的第一个数组。

详情见 Correctly allocating multi-dimensional arrays .

关于c - 将 2d 动态 int 数组解析为共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60056726/

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