diff options
| author | Anhgelus Morhtuuzh <william@herges.fr> | 2025-09-19 12:16:41 +0200 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <william@herges.fr> | 2025-09-19 12:16:41 +0200 |
| commit | 5a08a4e1e055a0a702a54cfa867d7fdebf2c1ad7 (patch) | |
| tree | 470e9aeb90b79f61beaab352fa0e394b9e76b11f /semestre 3/structures des données/tme/tme1-2/exo1 | |
| parent | cac7f3e868e98281f9f2b841101b09f02cf664fd (diff) | |
Cours du 15 au 19 septembre
Diffstat (limited to 'semestre 3/structures des données/tme/tme1-2/exo1')
3 files changed, 101 insertions, 0 deletions
diff --git a/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p1.c b/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p1.c new file mode 100644 index 0000000..51b6d92 --- /dev/null +++ b/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p1.c @@ -0,0 +1,23 @@ +#include<stdio.h> +#include<stdlib.h> + +const static int len = 10; + +int main(void) { + int *tab; + /* etait en unsigned */ + int i; + + tab = (int*)malloc(len*sizeof(int)); + + /* quand etait en unsigned, on avait un overflow a cause du i--, ce qui le remettait en positif + * ainsi, la boucle ne s'arretait jamais + */ + for (i=len-1; i>=0; i--) { + tab[i] = i; + } + + free(tab); + return 0; +} + diff --git a/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p2.c b/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p2.c new file mode 100644 index 0000000..fb99ee7 --- /dev/null +++ b/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p2.c @@ -0,0 +1,33 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +typedef struct adresse { + int numero; + char* rue; + int code_postal; +} Adresse; + +Adresse* creer_adresse(int n, char* r, int c) { + Adresse* new = (Adresse*) malloc(sizeof(Adresse)); + + new->numero = n; + /* l'erreur dans ce code etait que new->rue n'etait pas assez grand pour contenir 'r' + * de plus, le pointeur n'allait pas etre persistant, donc on a besoin de rajouter un malloc + * pour la regler, je l'ai donc initialisee + */ + new->rue = (char*) malloc(sizeof(char)*strlen(r)); + strcpy(new->rue, r); + new->code_postal = c; + + return new; +} + +int main(void) { + Adresse* maison = creer_adresse(12, "manoeuvre", 15670); + + printf("Adresse courante : %d rue %s %d France\n", maison->numero, maison->rue, maison->code_postal); + + return 0; +} + diff --git a/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p3.c b/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p3.c new file mode 100644 index 0000000..577721c --- /dev/null +++ b/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p3.c @@ -0,0 +1,45 @@ +#include <stdio.h> +#include <stdlib.h> + +typedef struct tableau{ + int* tab; + int maxTaille; + int position; +}Tableau; + +void ajouterElement(int a, Tableau *t){ + t->tab[t->position]=a; + t->position++; +} + +Tableau* initTableau(int maxTaille){ + Tableau* t = (Tableau*)malloc(sizeof(Tableau)); + t->position=0; + t->maxTaille=maxTaille; + /* les 400 bytes repeperes par valgrind proviennent d'ici : 400/4 = 100, 4 etant la taille d'un int ici */ + t->tab=(int*)malloc(sizeof(int)*maxTaille); + return t; +} + +void affichageTableau(Tableau* t){ + printf("t->position = %d\n",t->position); + printf("[ "); + for (int i=0; i < (t->position); i++){ + printf("%d ",t->tab[i]); + } + printf("]\n"); +} + +int main(){ + Tableau* t; + t = initTableau(100); + ajouterElement(5,t); + ajouterElement(18,t); + ajouterElement(99999,t); + ajouterElement(-452,t); + ajouterElement(4587,t); + affichageTableau(t); + /* ce programme provoquait un leak car il ne liberait jamais tab */ + free(t->tab); + free(t); +} |
