Skip to content
Snippets Groups Projects
Commit 929c280f authored by Pierre Kunzli's avatar Pierre Kunzli
Browse files

correction de coquilles

parent 7e8c1280
No related branches found
No related tags found
No related merge requests found
...@@ -25,7 +25,7 @@ date: "2022-11-22" ...@@ -25,7 +25,7 @@ date: "2022-11-22"
frac->denom = -1; frac->denom = -1;
``` ```
- La zone mémoire **n'est pas** initialisée. - La zone mémoire **n'est pas** initialisée.
- Désallouer la mémoire explicitement $\Rightarrow$ **fuites mémoires**. - Désallouer la mémoire explicitement, sinon **fuites mémoires**.
- Il faut connaître la **taille** des données à allouer. - Il faut connaître la **taille** des données à allouer.
![La représentation mémoire de `fraction_t` et fuites.](figs/pointer_struct_ok.svg){width=100%} ![La représentation mémoire de `fraction_t` et fuites.](figs/pointer_struct_ok.svg){width=100%}
...@@ -64,8 +64,8 @@ date: "2022-11-22" ...@@ -64,8 +64,8 @@ date: "2022-11-22"
```C ```C
int *p = malloc(50 * sizeof(int)); int *p = malloc(50 * sizeof(int));
// initialize somehow // initialize somehow
double a = p[7]; int a = p[7];
double b = *(p + 7); // on avance de 7 "double" int b = *(p + 7); // on avance de 7 "int"
p[0] == *p; // le pointeur est le premier élément p[0] == *p; // le pointeur est le premier élément
``` ```
...@@ -96,7 +96,7 @@ $$ ...@@ -96,7 +96,7 @@ $$
``` ```
- En effet, un pointeur est aussi une variable (une variable qui contient une adresse mémoire). - En effet, un pointeur est aussi une variable (une variable qui contient une adresse mémoire).
- Chaque `*`{.C} ou `&`{.C} rajoute une indirection. - Chaque `*`{.C} rajoute une indirection.
# Allocation dynamique de mémoire (6/7) # Allocation dynamique de mémoire (6/7)
...@@ -145,14 +145,14 @@ void initialize_to(int32_t *p, size_t size, int32_t val) { ...@@ -145,14 +145,14 @@ void initialize_to(int32_t *p, size_t size, int32_t val) {
```C ```C
// alloue un tableau de taille 50 et l'initialise à -1 // alloue un tableau de taille 50 et l'initialise à -1
int32_t *p = initialize_to(p, 50, -1); int32_t *p = initialize_to(50, -1);
free(p); // ne pas oublier free(p); // ne pas oublier
``` ```
. . . . . .
```C ```C
uint32_t initialize_to(int32_t *p, size_t size, int32_t val) { uint32_t initialize_to(size_t size, int32_t val) {
int32_t *p = malloc(size * sizeof(*p)); int32_t *p = malloc(size * sizeof(*p));
for (size_t i = 0; i < size; ++i) { for (size_t i = 0; i < size; ++i) {
p[i] = val; p[i] = val;
...@@ -222,20 +222,6 @@ p[20] = 1.3; ...@@ -222,20 +222,6 @@ p[20] = 1.3;
* Mais il ne peut contenir que `50 / 4` floats (un float est composé de 32 bits). * Mais il ne peut contenir que `50 / 4` floats (un float est composé de 32 bits).
* On dépasse la capacité de la mémoire allouée: comportement indéfini. * On dépasse la capacité de la mémoire allouée: comportement indéfini.
# Questions
## Que fait le code suivant?
```C
float *p = malloc(50);
p[20] = 1.3;
```
. . .
* On déclare un pointeur de floats de taille 50 octets.
* Mais il ne peut contenir que `50 / 4` floats (un float est composé de 32 bits).
* On dépasse la capacité de la mémoire alloué: comportement indéfini.
# Questions # Questions
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment