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 :

Problème d'allocation mémoire en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 1
    Par défaut Problème d'allocation mémoire en C
    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
     
    void affichage_matrice(int **t, int n ) 
    {int i, j; 
    	for ( i=0; i<n; i++) //On atteint nbsommet +1 
    		{	for (j=0; j<n; j++)
    				printf ("  %d ",t[i][j]); 
     
    			printf("\n");
     
    		}
    }
     void allocation ()
    {
    char ch[BUFFER];
    int i,s1,s2,w;
     
    	while (fgets(ch,BUFFER,stdin)) 
    	{
     
    		if (sscanf(ch,"%d %d %d" ,&s1 ,&s2 ,&w)==3) //s'il lit 3 arguments il les stocke dans la matrice d'adjacence 
    						{						
    							t[s1][s2]=w;
    							t[s2][s1]=w;
    							NbAretes++;
    						}			
    				else if (sscanf(ch,"%d",&NbSommets)==1) // <=> a lu le nombre de sommets 
    					{ 
    						t= malloc( (NbSommets+1) * sizeof(int) );
    						for (i=0; i<NbSommets+1; i++)
    							t[i]= malloc((NbSommets+1)* sizeof(int));
    						affichage_matrice(t,NbSommets+1);
     
    					}
    	}
     
     
    }
    voici mes codes.
    Nom : Capture du 2016-11-26 21-21-32.png
Affichages : 371
Taille : 10,4 Ko
    Et voici l’exécution
    Le problème : pourquoi il m'affiche des adresse ? et comment je peut le corrigé ?
    Et merci pour vos réponses .

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Comme tu utilises gdb, tu peux déjà break pour voir ce qu'il se passe.

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Quand le résultat n'est pas bon, ca peut venir de trois choses:
    1. le traitement est mal fait,
    2. les données traités ne sont pas bonnes,
    3. le résultat observé n'est pas celui produit.


    Si on est en général dans le cas 1, je conseille très vivement de vérifier le cas 2 en premier, c'est très simple à faire, et si c'est la cause du problème, on peut chercher très longtemps dans le code.

    Il faut garder le troisième cas en tête, car ca peut arriver, par exemple si on exécute une version du programme, alors qu'on compile ailleurs. Ou alors si on lit le mauvais fichier.

  4. #4
    Membre très actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 548
    Par défaut
    Bonjour;
    Citation Envoyé par HXFdanger Voir le message
    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
    void allocation ()
    {
    char ch[BUFFER];
    int i,s1,s2,w;
    
    	while (fgets(ch,BUFFER,stdin)) 
    	{
    
    		/*(Cas 1) --> */ if (sscanf(ch,"%d %d %d" ,&s1 ,&s2 ,&w)==3) //s'il lit 3 arguments il les stocke dans la matrice d'adjacence 
    						{						
    							t[s1][s2]=w;
    							t[s2][s1]=w;
    							NbAretes++;
    						}			
    				/* (Cas 2) ---> */else if (sscanf(ch,"%d",&NbSommets)==1) // <=> a lu le nombre de sommets 
    					{ 
    						t= malloc( (NbSommets+1) * sizeof(int) );
    						for (i=0; i<NbSommets+1; i++)
    							t[i]= malloc((NbSommets+1)* sizeof(int));
    						affichage_matrice(t,NbSommets+1);
    
    					}
    	}
    
    
    }

    Votre fonction d’allocation dynamique de mémoire est mal conçue.
    Dans le premier cas vous avez affaire à un SEGMENTATION FAULT, car vous accéder et écrivez à des indices mémoire pour lequel aucune mémoire n'a été allouée.
    Le deuxième cas est dû à la façon dont vous invoquez l’allocation dynamique des lignes de votre matrice ce n’est pas t= malloc( (NbSommets+1) * sizeof(int) );, mais plutôt t= malloc( (NbSommets+1) * sizeof(int*) ); ce qui pose probablement problème lors de l’affichage (a vérifié)
    Cependant, il est fortement conseil de connaître l’état de l’allocation dynamique que l’on a effectuée, car en cas d’échec, il faut prendre des mesures adéquates. De la même manière que l’on a alloué dynamiquement la mémoire, il faut également faire de même pour rendre au système la mémoire qui a été préalablement allouée.

    Voici un lien qui vous présente comment doit-on s'y employer : http://rperrot.developpez.com/articles/c/allocationC/
    à bientôt

Discussions similaires

  1. Problème d'allocation mémoire
    Par Fibus dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 10/01/2008, 16h35
  2. Problème d'allocation mémoire
    Par elmayor1983 dans le forum C++
    Réponses: 5
    Dernier message: 14/02/2007, 10h08
  3. Problème d'allocation mémoire et fork
    Par Conap dans le forum Langage
    Réponses: 3
    Dernier message: 20/07/2006, 15h34
  4. Problème d'allocation mémoire
    Par araya dans le forum C
    Réponses: 2
    Dernier message: 04/05/2006, 20h03
  5. Problème d'allocation mémoire
    Par cali1983 dans le forum C++
    Réponses: 10
    Dernier message: 10/03/2006, 23h23

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