Questo codice fa un errore di segmentazione:Nessun errore di segmentazione con la forcella
int main(int argc, char *argv[]){
int *n;
*n = atoi(argv[1]);
printf("n: %d \n", *n);
return 0;
}
mentre questo funziona:
int main(int argc, char *argv[]){
int *n;
*n = atoi(argv[1]);
pid_t pid = fork();
if (pid == 0)
return 0;
else
printf("n: %d \n", *n);
return 0;
}
Perché la seconda con la forcella funziona? So che dopo lo int *n
, dovrei allocare lo spazio per unocon uno malloc()
, ma l'utilizzo dello fork()
sembra farlo automaticamente.
modifica: Ora capisco Comportamento non definito :) Ma ora sto chiedendo: qual è la causa in questo caso specifico?
comportamento indefinito non è definito; tutto può succedere e il risultato è legittimo. Non invocare comportamenti non definiti. –
"Qualcuno una volta mi ha detto che nel basket non puoi tenere la palla e scappare, ho preso un pallone da basket e l'ho provato e ha funzionato bene, ovviamente non ha capito il basket." - Roger Miller su comportamento non definito –