Skip to content
Snippets Groups Projects
Verified Commit cccd3332 authored by orestis.malaspin's avatar orestis.malaspin
Browse files

typos

parent a4876fb1
Branches
No related tags found
No related merge requests found
...@@ -218,6 +218,8 @@ vec3 add(vec3 lhs, vec3 rhs){ ...@@ -218,6 +218,8 @@ vec3 add(vec3 lhs, vec3 rhs){
# Le map # Le map
* Exemple d'application
```c ```c
typedef double (*operator)(double); typedef double (*operator)(double);
double *map(operator op, double *tab, size_t size) { double *map(operator op, double *tab, size_t size) {
...@@ -230,10 +232,46 @@ double *map(operator op, double *tab, size_t size) { ...@@ -230,10 +232,46 @@ double *map(operator op, double *tab, size_t size) {
double add_one(double val) { double add_one(double val) {
return val + 1; return val + 1;
} }
double sqr(double lhs){ double sqr(double val){
return apply_operator(add_dbl, lhs, rhs); return val * val;
} }
double tab[] = {1.0, 2.0, 3.0}; double tab[] = {1.0, 2.0, 3.0};
double *square = map(sqr, tab, 3); double *square = map(sqr, tab, 3);
double *and_one = map(add_one, square, 3); double *and_one = map(add_one, square, 3);
``` ```
# Le map
* Permettrait le chaînage.
```C
double *sqr_and_one = map(add_one, map(sqr, tab, 3), 3);
```
. . .
* Problème?
. . .
* Allocation dynamique... fuite mémoire.
. . .
* Solution?
. . .
```c
typedef double (*operator)(double);
double *map(operator op, double *tab, size_t size) {
double *res = malloc(sizeof(*res) * size);
for (int i = 0; i < size; ++i) {
res[i] = op(tab[i]);
}
free(tab);
return res;
}
```
* Problème potentiel?
* **Attention au double free!**
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment