OVH Cloud OVH Cloud

liberation de memoire

3 réponses
Avatar
did
salut
voici le bout de code suivant (en C) (j'ai pas tout mis, c'est pas tres
important pour la question que je pose)

#define TAILLECOM 12
int main(void) {
int count_word = 0 ;
char tab[TAILLECOM] ;
char* pc;
char** commande ;
/*...*/
while (1) {
res = fork() ;
/*...*/
if (res == 0) {
commande = malloc((count_word+1) * sizeof* commande) ;
if (commande == NULL) {
perror("erreur:malloc") ;
exit(EXIT_FAILURE) ;
}
for (i = 0 ; i < count_word ; i++) {
commande[i] = malloc(TAILLECOM * sizeof*(commande[i])) ;
if (commande[i] == NULL) {
perror("erreur:malloc") ;
exit(EXIT_FAILURE) ;
}
pc = divise_chaine(chaine, tab) ;
strcpy(commande[i], tab) ;
chaine = pc ;
}
commande[i] = NULL ; /* car la liste doit se finir par NULL */

execvp(commande[0], &commande[0]) ;
perror("erreur") ;
exit (EXIT_FAILURE) ;
}

J'aimerai savoir comment faire pour desallouer la memoire apres un
execvp. Je vois pas comment faire :/
Merci de vos eclaircissement :)
did

3 réponses

Avatar
Stephane Dupille
salut


Salut !

<snip>

J'aimerai savoir comment faire pour desallouer la memoire apres un
execvp. Je vois pas comment faire :/


Tu ne peux pas. Après un exec, le programme dans lequel tu étais
n'existe plus.

Alors soit :
1/ tu le fais avant (bonne méthode) ;
2/ tu laisses le système le faire pour toi, ce qu'il fait fort bien,
soit dit en passant (méthode sale, mais qui marche).

Merci de vos eclaircissement :)


Ah mais de rien.

--
C'est pour le GNU ?
Non, j'ai fait attention à dépasser les trois lignes réglementaires.

-+- TP in <http://www.le-gnu.net> - Bien étaler son pathos -+-

Avatar
Marc Boyer
Stephane Dupille wrote:
Alors soit :
1/ tu le fais avant (bonne méthode) ;
2/ tu laisses le système le faire pour toi, ce qu'il fait fort bien,
soit dit en passant (méthode sale, mais qui marche).


J'aurais tendance moi a faire une fonction/macro
qui enveloppe free, et qui ne fait rien si on considère
que l'OS le fait mieux que free (avec choix par une option
de compilation).
Comme ça, on a le meilleur des deux mondes.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(

Avatar
Laurent Wacrenier
Marc Boyer écrit:
J'aurais tendance moi a faire une fonction/macro
qui enveloppe free, et qui ne fait rien si on considère
que l'OS le fait mieux que free (avec choix par une option
de compilation).


free() ne libère pas nessessairement la mémoire allouée au système.
Il ne fait que rendre la mémoire disponible pour un prochain malloc().