TD7 part 1 corrections
This commit is contained in:
parent
d4fb4c586a
commit
b52709be62
1 changed files with 20 additions and 3 deletions
|
@ -95,6 +95,11 @@ valgrind --leak-check=full --show-leak-kinds=all ./test-reachable-leak
|
||||||
==14383== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
|
==14383== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
En observant le code de notre programme nous pouvons voir que `*c` est un
|
||||||
|
**pointeur global** (dans le sens variable globale). Dans le `main()`, il prend
|
||||||
|
l'adresse d'une zone de mémoire créée avec `malloc`. **Cette zone mémoire n'est
|
||||||
|
pas libérée**, ainsi elle reste accessible à la fin du programme.
|
||||||
|
|
||||||
## Partie 3
|
## Partie 3
|
||||||
|
|
||||||
Effectivement, `cppcheck` nous averti à propos d'une zone mémoire créée mais non
|
Effectivement, `cppcheck` nous averti à propos d'une zone mémoire créée mais non
|
||||||
|
@ -132,6 +137,11 @@ Avec l'option `--track-origins=yes` suggérée par sa première exécution,
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Valgrind n'averti de ce problème que lors de la première utilisation de la
|
||||||
|
variable, ici dans `printf()`. C'est un comportement normal : c'est lors de
|
||||||
|
**l'accès en lecture de cette varible** que Valgrind peut déterminer cet accès
|
||||||
|
se fait alors que la variable n'est pas initialisée.
|
||||||
|
|
||||||
## Partie 4
|
## Partie 4
|
||||||
|
|
||||||
Lors du lancement du programme `test-undefined`, nous pouvons constater que la
|
Lors du lancement du programme `test-undefined`, nous pouvons constater que la
|
||||||
|
@ -146,7 +156,7 @@ Comme nous l'avons vu en cours, nous sommes en présence d'un cas non définis p
|
||||||
la norme C.
|
la norme C.
|
||||||
|
|
||||||
*Valgrind* lui de fait part d'aucun problème, il ne se soucis pas du type de la
|
*Valgrind* lui de fait part d'aucun problème, il ne se soucis pas du type de la
|
||||||
variable `i` mais de même espace qu'elle occupe en mémoire. Et il **n'a pas
|
variable `i` mais de l'espace qu'elle occupe en mémoire. Et il **n'a pas
|
||||||
changé**.
|
changé**.
|
||||||
|
|
||||||
``` shell
|
``` shell
|
||||||
|
@ -260,8 +270,15 @@ l'option `-fno-common` n'est pas activée par défaut. Sans cette option il n'es
|
||||||
pas possible pour lui de détecter le problème : il ne sais définir les limites
|
pas possible pour lui de détecter le problème : il ne sais définir les limites
|
||||||
des données globales non initialisés (stockées dans le segment *BSS*)
|
des données globales non initialisés (stockées dans le segment *BSS*)
|
||||||
|
|
||||||
*Valgrind* ne se plaint pas et pour cause: nous se sommes toujours pas en
|
le module *Memcheck* de Valgrind ne détecte pas les erreurs de type
|
||||||
présence d'un problème de fuite de mémoire.
|
*out-of-bound* sur la pile, c'est une limitation documentée par l'équipe de
|
||||||
|
dévellopement :
|
||||||
|
|
||||||
|
> Unfortunately, Memcheck doesn't do bounds checking on global or stack arrays.
|
||||||
|
> We'd like to, but it's just not possible to do in a reasonable way that fits
|
||||||
|
> with how Memcheck works. Sorry.
|
||||||
|
|
||||||
|
[source](https://valgrind.org/docs/manual/faq.html#faq.overruns)
|
||||||
|
|
||||||
### Question 3
|
### Question 3
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue