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

ajout correction partielle serie 8

parent 052c1dfe
Branches
No related tags found
No related merge requests found
#include <stdio.h>
void foo(int a) {
a += 3;
}
void bar(int *a) {
*a += 3;
}
void baz(int *a) {
a += 3;
}
int main() {
int a = 5;
printf("%i\n", a);
// la fonction foo ne peut pas modifier son parametre
// c'est donc normal que a ne soit pas modifié
foo(a);
printf("%i\n", a);
// la fonction bar prend un pointeur sur a
// ce qui lui permet de modifier a
bar(&a);
printf("%i\n", a);
// la fonction baz pourrait modifier a
// mais son code modifie uniquement son pointeur
// en interne de la fonction
baz(&a);
printf("%i\n", a);
}
\ No newline at end of file
#include <stdio.h>
#include <stdlib.h>
// le tableau statique tab[a] est désalloué à la fin de la fonction
// on le remplace par une allocation dynamique
int *foo(int a) {
int* tab = malloc(a*sizeof(int));
for (int i = 0; i < a; ++i) {
tab[i] = 2;
}
return tab;
}
// l'allocation était de a octets au lieu de a*sizeof(int) octets
int *bar(int a) {
int *tab = malloc(a*sizeof(int));
for (int i = 0; i < a; ++i) {
tab[i] = 2;
}
return tab;
}
// tab était réalloué à l'intérieu de baz sans que cela soit visible a l'exterieur
// cela a pour conséquence de ne pas initialiser l'espace mémoire vu a l'extérieur
// et de provoquer une fuite mémoire
void baz(int *tab, int b) {
for (int i = 0; i < b; ++i) {
tab[i] = 2;
}
}
int main() {
int *a = foo(4);
printf("%d\n", a[3]);
int *b = bar(4);
printf("%d\n", b[3]);
int *c = malloc(4*sizeof(int));
baz(c, 4);
printf("%d\n", c[3]);
free(a);
free(b);
free(c);
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment