294
Le logiciel R - Maˆ ıtriser le langage
Maintenant, on peux taper les instructions suivantes dans la console GDB afin
de rajouter un point d’arrˆ et ` a la ligne 32 de notre code C++, puis on relance
l’ex´ ecution du code, et lorsque le point d’arrˆ et est rencontr´ e, le code s’arrˆ ete ` a
nouveau et on peut demander ` a r´ e-afficher le contenu de l’array x :
break 32
continue
x/30dw combmat
6.6.4.4 D´ etection de fuites de m´ emoire
L’affichage de l’un des messages Segmentation fault (ou encore segfault),
invalid next size, std::bad_alloc (que vous rencontrerez certainement sous
Linux !) ou encore des r´ esultats incoh´ erents, ou de fa¸ con plus radicale, le plantage complet de R, indique souvent un probl` eme de m´ emoire (acc` es ` a une
adresse non r´ eserv´ ee ou non initialis´ ee, utilisation d’une m´ emoire lib´ er´ ee, etc.).
Ces fuites de m´ emoire se produisent souvent lorsque l’on a oubli´ e d’utiliser
l’instruction delete[] ptr; pour effacer de la m´ emoire un pointeur ptr introduit dans notre fonction C/C++. Ce probl` eme est aussi parfois visible dans le
gestionnaire des tˆ aches lorsque l’on fait tourner une grosse simulation dans R
et que l’on voit que le processus de R prend de plus en plus de m´ emoire, alors
qu’il ne devrait pas.
Linux
Sous Linux, l’affichage de l’utilisation m´ emoire par les diff´ erents processus s’obtient grˆ ace ` a la commande (tap´ ee dans un terminal) watch -d free
pour l’utilisation globale ou bien top -p PID pour un processus en particulier (utilisez ps au pour trouver le PID du processus souhait´ e). On peut
aussi utiliser l’outil graphique ksysguard.
Une autre erreur classique consiste ` a chercher ` a manipuler la n-i` eme case
d’un tableau de dimension strictement inf´ erieure ` a n (acc` es ` a une m´ emoire non
d´ efinie). Il peut alors devenir d´ elicat de d´ etecter d’o` u vient le probl` eme. Le logiciel Dr Memory (http://code.google.com/p/drmemory), et ´ eventuellement les
Précédent

- 327/701

Suivant