Ich schrieb ein kurzes Programm, das zwei Werte in den zwei Prozessen multipliziert und teilt. Das Problem tritt am Ende der Anwendung auf, wenn addiert, will ich die Ergebnisse der Multiplikation und Division.Wie man Gabel in C benutzt
Code:
#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;
}
Das Ergebnis der Addition ist eine Verletzung des Speicherschutzes. Was mache ich falsch?
Prozesse teilen keinen Speicher. –
Die übergeordneten und untergeordneten Prozesse haben separate Adressräume. – jarmod
Wenn Sie Speicher freigeben möchten, benötigen Sie einen Thread anstelle eines neuen Prozesses –