[C] Malloc

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
ambrosiana911
Prode Principiante
Messaggi: 8
Iscrizione: mercoledì 15 aprile 2015, 18:40
Sesso: Maschile

[C] Malloc

Messaggio 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.
Ultima modifica di ambrosiana911 il lunedì 15 giugno 2015, 10:04, modificato 1 volta in totale.
Avatar utente
vbextreme
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1214
Iscrizione: domenica 12 gennaio 2014, 14:06
Desktop: lxde
Distribuzione: xubuntu 14.10

Re: [C] Malloc

Messaggio 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.
Easy framework per il linguaggio C.
vbextreme hack your life
ambrosiana911
Prode Principiante
Messaggi: 8
Iscrizione: mercoledì 15 aprile 2015, 18:40
Sesso: Maschile

Re: [C] Malloc

Messaggio 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.
Avatar utente
vbextreme
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1214
Iscrizione: domenica 12 gennaio 2014, 14:06
Desktop: lxde
Distribuzione: xubuntu 14.10

Re: [C] Malloc

Messaggio da vbextreme »

serve piu codice!
forkcall() cosa fa?
cosa sono quelle variabili? cosa contengono? a cosa servono?
Easy framework per il linguaggio C.
vbextreme hack your life
Avatar utente
cortinico
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 477
Iscrizione: venerdì 15 maggio 2015, 16:49
Desktop: Unity
Distribuzione: Ubuntu 15.04 amd64
Sesso: Maschile
Località: Pisa
Contatti:

Re: [C] Malloc

Messaggio 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.
"Look wide, and even when you think you are looking wide – look wider still!"
http://ncorti.com
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti