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
1 merge request!3correction de coquilles
Pipeline #20723 passed
...@@ -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