Pagina 1 di 1

[C] Malloc

Inviato: domenica 14 giugno 2015, 12:38
da ambrosiana911
Ciao a tutti ho dei problemi con l'ereditarietà di varibili allocate tramite malloc(). Ovvero io alloco e inizializzo 2 variabili :

Codice: Seleziona tutto

	node *buf = (node*) malloc(n_nodi*sizeof(node));
	
	for(i = 0 ; i < n_nodi ; i++){
		(buf+i)->num = -1;
		(buf+i)->destinatario = -1;
		(buf+i)->dato_ricevuto = -1;		
	}
        pid_t *nodesPid = malloc(nodesNumber*sizeof(pid_t));

	canalePid = forkCall(canale);

	for(counter = 0 ; counter < nodesNumber ; counter++)
		*(nodesPid+counter) = forkCall(nodo);	
Perchè quando creo dei figli tramite system call fork() me le ritrovo tutte a 0?

Grazie a tutti per l'aiuto.

Re: [C] Malloc

Inviato: lunedì 15 giugno 2015, 8:45
da vbextreme
perchè la fork restituisce 0 al processo figlio e il pid del figlio al padre.
dovresti mostrare il codice, ed esporre meglio il problema.

Re: [C] Malloc

Inviato: lunedì 15 giugno 2015, 9:15
da ambrosiana911
Cerco di spiegarmi meglio. Ho un processo principale che alloca dinamicamente due variabili e poi crea dei figli:

Codice: Seleziona tutto

	
node *buf = (node*) malloc(n_nodi*sizeof(node));
	
for(int i = 0 ; i < n_nodi ; i++){
	(buf+i)->num = -1;
	(buf+i)->destinatario = -1;
	(buf+i)->dato_ricevuto = -1;		
}
	
nodesPid = malloc(nodesNumber*sizeof(pid_t));

pid_t canalePid = forkCall(canale);
	
for(counter = 0 ; counter < nodesNumber ; counter++)
	*(nodesPid+counter) = forkCall(nodo);
In questi figli io ho bisogno di utilizzare le variabili nodesPid e buf ma invece di trovarle ben inizializzate valgono tutte 0.
Spero di essere riuscito a spiegarmi meglio.

Re: [C] Malloc

Inviato: lunedì 15 giugno 2015, 10:13
da vbextreme
serve piu codice!
forkcall() cosa fa?
cosa sono quelle variabili? cosa contengono? a cosa servono?

Re: [C] Malloc

Inviato: lunedì 15 giugno 2015, 20:41
da cortinico
Qui c'e' la risposta alla tua domanda:
http://stackoverflow.com/questions/7601 ... -unix-fork

La memoria allocata dinamicamente viene copiata, per cui se te le trovi a 0 vuol dire che stai sbagliando qualcosa nel tuo codice.