2つのプロセスで2つの値を乗算して除算する短いプログラムを書いた。 問題はアプリケーションの最後に発生します。一緒に追加すると、乗算と除算の結果が必要になります。Cでforkを使うには
コード:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[]) {
int iloczyn, a, b;
int *w_iloczyn, *w_a, *w_b;
float iloraz, suma, result;
float *w_iloraz, *w_suma, *w_result;
scanf("%d", &a);
scanf("%d", &b);
w_a = &a;
w_b = &b;
pid_t id = fork();
if (id == 0) {
iloczyn = (*w_a) * (*w_b);
w_iloczyn = &iloczyn;
printf("%d * %d = %d\n", *w_a, *w_b, *w_iloczyn);
} else {
int status = 255;
id = wait(&status);
id = waitpid(id, &status, 0);
iloraz = (float) *w_a/(float) *w_b;
w_iloraz = &iloraz;
printf("%d/%d = %f\n", *w_a, *w_b, *w_iloraz);
}
printf("Iloczyn: %i\n", *w_iloczyn);
printf("Iloraz: %f\n\n", *w_iloraz);
return 1;
}
加算の結果は、メモリ保護違反です。 私は何が間違っていますか?
プロセスはメモリを共有しません。 –
親プロセスと子プロセスは別々のアドレス空間を持ちます。 – jarmod
新しいプロセスの代わりにスレッドが必要なメモリを共有したい場合 –