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 :

Transposition de matrice


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Transposition de matrice
    Bonjour à tous,
    je réalise un programme qui a pour but d'ouvrir des matrices stockées dans un fichier txt, puis d'effectuer des opérations sur ces dernières, entre autre l'addition et la transposition. Mon programme ressemble a ca :

    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
    int transposition(struct matrice *M, struct matrice *T)				
    {
    	T->m=M->n;
    	T->n=M->m;
    	T->v_ptr = (double *) malloc ((T->n)*(T->m)*sizeof(double));
    	printf("Voici la matrice après transposition\n");
    	for (int i=0;T->n;i++)											
    		{
    			for (int j=0;j<T->m;j++)
    			{
    				T->v_ptr[i*(T->m)+j]=M->v_ptr[j*(M->m)+i];
    			}
    		}
    	return 0;
    }
    J'aurai pu renvoyer un struct matrice au lieu de prendre en argument deux matrices dont la structure est déjà définie mais l'objectif c'est de transposer M et de stocker cette transposée dans T !
    Dans mon main j'appelle cette fonction de la manière suivante :

    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
    int main(int argc, char *argv[])
    {	
    	struct matrice M;
    	struct matrice *T = malloc(sizeof(struct matrice));
    	int test1 = lecture_fichier(&M,argv[1]);
    	if (test1==1)
    	{
    		printf("Voici la matrice %s\n",argv[1]);
    		afficher_mat(&M);
    		transposition(&M,T);
    		afficher_mat(T);
    		free(M.v_ptr);
    		free(T->v_ptr);
    	}
     
    	return 1;
     
    }
    Or il se trouve qu'après compilation puis execution, j'ai un message d'erreur " Segementation fault (core dumped) ".
    Je sais que ceci a à voir avec l'allocation dynamique de mes matrices, mais je ne parviens pas à voir ce qui pose problème...

    Merci de votre aide !!

    Antdec

  2. #2
    Membre éprouvé
    Homme Profil pro
    Programmeur des cavernes
    Inscrit en
    Août 2017
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Programmeur des cavernes
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 364
    Points : 1 240
    Points
    1 240
    Par défaut
    Il manque une free (T) quelque part. Pour le moment tu as une fuite de mémoire.

    Est-il impossible que l'erreur de segmentation se produise pendant l'exécution de la fonction de lecture dans un fichier ?

    EDIT : Il y a de plus une erreur ici :
    Tu voulais sans doute écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i=0;i < T->n;i++)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Merci !! La boucle portant du coup sur des j parfois supérieurs aux dimensions même de la matrice, il était normal d'avoir un soucis de mémoire...

    La transposition se passe désormais bien merci beaucoup !! J'aurai sans doute d'autres questions mais ça m'aide a fond !

    Merci encore !

    Antdec

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Pourquoi tu fais une allocation pour "T" ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. transposition de matrice
    Par rom117 dans le forum Prolog
    Réponses: 5
    Dernier message: 06/01/2011, 13h17
  2. matrices, lignes, colonnes, transposition
    Par djbad dans le forum Général Python
    Réponses: 11
    Dernier message: 16/09/2010, 23h13
  3. Transposition de matrices
    Par gbsatti dans le forum C
    Réponses: 12
    Dernier message: 24/04/2009, 20h49
  4. [XSLT] transposition de matrice
    Par sekaijin dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/12/2005, 11h45
  5. Transposition de matrice
    Par dj_lil dans le forum Prolog
    Réponses: 5
    Dernier message: 11/10/2005, 12h06

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