gpt4 book ai didi

c - 将二维数组传递给递归

转载 作者:太空宇宙 更新时间:2023-11-04 03:23:56 25 4
gpt4 key购买 nike

我正在尝试在 C 中使用 fork 进行计算。我有一个包含成员 {1,2,3,4} 的二维数组,我有一个函数可以为数组中的每个成员求平方。我将使用子进程调用此函数。例如对于 3 个子进程输出将是这样的;

1.Child
1 4
9 16
----------
2.Child
1 16
81 256
----------
3.Child
1 256
6561 65536

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

int matrix[2][2] = {1, 2, 3 ,4 } ;

int main(){
forkFork(3);
}

void forkFork(int counter)
{
pid_t pid;
if(counter == 0)
{
exit(0);
}
if(counter > 0)
{
if ((pid = fork()) < 0)
{
perror("fork error :(");
}
else if (pid == 0)
{
matrixPower(matrix);
print(matrix);
}
else if(pid > 0)
{
forkFork(counter - 1);
}
}
}

void matrixPower(int m[2][2])
{
int i,j,k;
int result = 0;

for (i = 0; i < 2; i++)
{
for (j = 0; j < 2; j++)
{
result = matrix[i][j]*matrix[i][j];

m[i][j] = result;
result = 0;
}
}
}

void print(int a[2][2])
{
int row, col ;
for( row = 0; row < 2; row++ )
{
for( col = 0; col < 2 ; col++ )
{
printf("%d\t", a[row][col]);
}
puts("");
}

printf("-------------------------------\n");
}

我找不到将新数组传递给递归函数的方法...

最佳答案

您的解决方案的问题是所有 fork 进程都是由主/父进程创建的。因此,每个派生进程只是继承父进程的地址空间,其矩阵值始终为{1, 2, 3, 4}。解决方案是为每个修改进程创建其子进程。因此,一个新的子进程继承修改后的矩阵。

请参阅下面的解决方案,了解按预期工作的 forkFork 功能。

void forkFork(int counter)
{
pid_t pid;
if(counter == 0)
{
exit(0);
}
if(counter > 0)
{
if ((pid = fork()) < 0)
{
perror("fork error :(");
}
else if (pid == 0)
{
matrixPower(matrix);
print(matrix);
forkFork(counter - 1);
}
}
}

关于c - 将二维数组传递给递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42802801/

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