| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 
 |  
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
 
typedef struct t_tab
{
    int dim; // dimension du tableau
    double * data;
} Tableau;
 
Tableau * alloc_Tableau(unsigned int dim_,double val)
{
// alloue un espace memoire pour creer le tableau t et l'initialise a val
    assert(dim_>=0);
 
    Tableau * t=malloc(sizeof(Tableau));
    assert(t!=NULL);
 
    if(dim_==0) // si dim_==0 on considere que le tableau est vide
    {
	t->dim=0;
	t->data=NULL;
    }
    else
    {
	t->dim=dim_;
	t->data=malloc(dim_*sizeof(double));
	assert(t->data!=NULL);
	int i;
	for(i=0;i<dim_;i++)
	    t->data[i]=val;
    }
    return t;
}
 
void free_Tableau(Tableau * t)
{
    t->dim=0;
// libere la memoire
    if(t->data!=NULL)
    {
	free(t->data);
	t->data=NULL;
    }
    free(t);
    t=NULL;
    return ;
}
 
void affiche_Tableau(Tableau * t)
{
    if(t->data==NULL)
	printf("\nTableau vide\n");
    else
    {
	int i;
	for(i=0;i<t->dim;i++)
	    printf("%7.10g\t",t->data[i]);
	printf("\n");
    }
    printf("\n");
    return;
}
 
void assigne_val(Tableau * t,const double val)
{
// met toutes les composantes du tableau à la valeur val
    t=alloc_Tableau(3,0.0);
    int i;
    for(i=0;i<3;i++)
	t->data[i]=val;
 
    return;
}
 
int main()
{
    Tableau * t=alloc_Tableau(3,5);
    affiche_Tableau(t);
    free_Tableau(t); // jusque là j'obtiens bien comme sortie : 5 5 5
 
    Tableau * t2=NULL;
    assigne_val(t2,5); 
    affiche_Tableau(t2); // segmentation fault ici
    free_Tableau(t2);
 
    return 0;
} | 
Partager