IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

probleme d'allocation de matrice


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 38
    Par défaut probleme d'allocation de matrice
    pourquoi ma matrice n'est pas allouer après ma fonction "identite" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    void printMat(int **mat, int n, int m);
    void identite(int **mat, int n);
     
    int main(void)
    {
    	int **mat = NULL;
    	identite(mat, 5);
    	if(mat==NULL) printf("null\n");
    	else printMat(mat, 5, 5);
     
    	return 0;
    }
     
    void identite(int **mat, int n)
    {
    	int i,j;
    	if((mat=(int**)malloc(n*sizeof(int*)))==NULL)exit(1);
    	for(i=0;i<n;i++)
    		if((mat[i]=(int*)calloc(n,sizeof(int)))==NULL)exit(2);
    	for(i=0;i<n;i++)
    		mat[i][i]=1;
    }
     
    void printMat(int **mat, int n, int m)
    {
    	int i, j;
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<m;j++)
    			printf("%2d ",mat[i][j]);
    		printf("\n");
    	}
    }

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Elle est allouée, mais l'adresse d'allocation est perdue.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	int **mat = NULL;
    	identite(mat, 5);
    En aucune façon, la fonction identite() ne peut modifier par ce code la valeur de mat.

    Pour modifier la valeur de mat, deux possibilités
    - utiliser la valeur de retour de la fonction :
    - utiliser la liste des paramètres en passant l'adresse de mat :
    Dans les deux cas la fonction identite() doit être adaptée pour tenir compte de ces modifications.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 38
    Par défaut
    Merci pour toute ces information, j'ai du mal comprendre mon énoncé alors vu que le prototype était déjà donné.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    On peut toujours te donner des tuyaux, mais il faudrait que tu nous donnes justement ton énoncé.

    En principe, dans un code C, il faut éviter les fermetures sauvages du programme à coup d'exit, car c'est pas propre. La "philosophie", c'est que lorsqu'une fonction échoue, elle doit le faire savoir à la fonction appelante, qui gère l'erreur ; si elle-même, à cause de l'erreur remontée, échoue, elle remonte l'erreur à son tour à celle qui l'a appelée. Et ainsi de suite... jusqu'à revenir à la fonction main. Cela permet de bien structurer son programme.
    D'autant que la règle veut que lorsque de la mémoire a été allouée dynamiquement (via malloc, calloc, realloc, etc), elle doit toujours être libérée par le programme lui-même via la fonction free.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme d'inversion de matrice subtil
    Par babycrash dans le forum C
    Réponses: 2
    Dernier message: 02/08/2006, 17h41
  2. Probleme d'allocation avec un malloc
    Par theshark85 dans le forum C
    Réponses: 11
    Dernier message: 25/04/2006, 17h30
  3. [LG] Problème pour afficher une matrice
    Par phoebee dans le forum Langage
    Réponses: 4
    Dernier message: 11/08/2005, 21h41
  4. probleme d allocation avec un tableau de BYTE
    Par e1lauren dans le forum C++
    Réponses: 5
    Dernier message: 06/05/2005, 13h42
  5. probleme d'allocation dynamique
    Par vince3320 dans le forum C
    Réponses: 10
    Dernier message: 22/04/2004, 16h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo