Bonsoir,
Je débute en langage C et rencontre des difficultés pour un exo sur les structures et tableaux dynamiques.
Il faut définir une structure Vecteur qui contient la taille et le tableau de ses coefficients réels (double).
Ensuite allouer et desallouer dynamiquement Vecteur à l'aide de deux fonctions dont voici les prototypes :
Vecteur *alloc_Vecteur(int n);
Vecteur *free_Vecteur(Vecteur *V);
J'ai donc crée la structure Vecteur et les deux fonctions mais avant de les tester, j'ai essayé d'affecter "à la main" quelques cases du tableau contenu dans la structure que j'ai crée.
Comme ceci :
Code :
- int main()
- { int n=8; Vecteur *V1;
- V1=alloc_Vecteur(n);
- V1->t[1]=9;
- printf("%f", V1->t[1]);
- }
|
La compilation réussit mais le programme plante à l'execution.
Bizarrement, lorsque j'affecte une case du tableau autre que la 0ème ou la 1ère, comme
ceci,
Code :
- int main()
- { int n=8; Vecteur *V1;
- V1=alloc_Vecteur(n);
- V1->t[3]=9;
- printf("%f", V1->t[3]);
- }
|
, et bien le programme s'exécute cette fois-ci correctement et m'affiche
9.000000.
J'essaye de trouver l'origine du problème depuis des heures, en vain.
Si vous pouviez regarder mon programme et m'indiquer les erreurs, cela me serait d'une
grande utilité.
Je vous ajoute le contenu de mon programme :
Code :
- #include <stdio.h>
- #include <math.h>
- #include <limits.h>
- #include <float.h>
- #include <stdlib.h>
- #include <stddef.h>
- #include <assert.h>
- typedef struct{int taille; double*t;}Vecteur;
- Vecteur *alloc_Vecteur(int n)
- { Vecteur *V = NULL;
- assert( n>0);
- V = (Vecteur*)malloc(sizeof(Vecteur));
- V->taille=n;
- V->t=(double*)malloc(n*sizeof(double*));
- }
- Vecteur *free_Vecteur(Vecteur *V)
- {
- if ( V != NULL )
- { free( V->t );
- free(V);
- }
- return(NULL);
- }
- void affecte_Vecteur(double valeur, Vecteur *V, int i)
- {
- assert ( ( V!=NULL ) & ( i>=1 ) );
- V->t[i-1]=valeur;
- }
- int main()
- { int n=8, valeur =7;
- Vecteur *V1;
- V1=alloc_Vecteur(n);
- V1->t[1]=9;
- printf("%f", V1->t[1]);
- V1=free_Vecteur(V1);
- system("pause" );
- return 0;
- }
|
Merci d'avance !