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 :

[SIGBUS] Cannot Access Memory apres un Malloc?


Sujet :

C

  1. #1
    Membre du Club

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 69
    Points
    69
    Par défaut [SIGBUS] Cannot Access Memory apres un Malloc?
    Bonjour !
    J'ai posté y'a pas longtemps sur un probleme de printf Et vous m'aviez aidé il faut dire que c'était tout bete comme moi ! Maintenant mon code qui est censé deplacer des caisses jusqu'a la fin tout seul grace a l'algo A* plante tres bizarrement. Il effectue son travail sans probleme jusqu'au moment où en créant un noeud ( structure de structure de structure ) il efface une partie d'une liste chainee qui n'est pas du tout appellée au moment de la création du noeud en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AStar_nouveau_noeud = malloc(sizeof(struct AStar_noeud_t));
    Avant cette ligne, je peux acceder aux elements de la liste sans probleme, apres cette ligne j'ai droit a un Cannot Access apres le premier element de la liste. Comment sa se fait ? Un moyen de pallier a çà ? J'ai beau cherché depuis 2jours , sans dormir je ne comprends pas

    Cordialement et en vous remerciant d'avance

    les sources et l'exe :
    http://atpred.free.fr/test.tar

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: [SIGBUS] Cannot Access Memory apres un Malloc?
    Citation Envoyé par predacktor
    ! Maintenant mon code qui est censé deplacer des caisses jusqu'a la fin tout seul grace a l'algo A* plante tres bizarrement. Il effectue son travail sans probleme jusqu'au moment où en créant un noeud ( structure de structure de structure ) il efface une partie d'une liste chainee qui n'est pas du tout appellée au moment de la création du noeud en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AStar_nouveau_noeud = malloc(sizeof(struct AStar_noeud_t));
    Quelle est la valeur de AStar_nouveau_noeud après le malloc(). Si c'est NULL, et que tu continues comme ça, normal que plus rien ne fonctionne !
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre du Club

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 69
    Points
    69
    Par défaut Re: [SIGBUS] Cannot Access Memory apres un Malloc?
    Quelle est la valeur de AStar_nouveau_noeud après le malloc(). Si c'est NULL, et que tu continues comme ça, normal que plus rien ne fonctionne !
    Mais non il a une valeur bien reelle (0x245f0) tte façon j'aurai eu un segmentation fault en attribuant les valeur a ce nouveau noeud s'il était null. Mais c'est vraiment bizarre quand meme qu'apres ce malloc je perds l'acces a ma liste alors que cette fonction n'a aucun lien explicite entre les noeuds et la liste.


    Ô codeurs de toujours je fais appel a votre puissante aide sinon je vais tuer un CRS en bas de chez moi avec un écran!

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: [SIGBUS] Cannot Access Memory apres un Malloc?
    Citation Envoyé par predacktor
    Mais non il a une valeur bien reelle (0x245f0) tte façon j'aurai eu un segmentation fault en attribuant les valeur a ce nouveau noeud s'il était null. Mais c'est vraiment bizarre quand meme qu'apres ce malloc je perds l'acces a ma liste alors que cette fonction n'a aucun lien explicite entre les noeuds et la liste.
    C'est peut être simplement parce que précédemment, il y a eu un débordement de tableau qui a massacré le chainage interne des blocs. Ca se manifeste un jour, pourquoi pas sur un malloc()...
    Ô codeurs de toujours je fais appel a votre puissante aide sinon je vais tuer un CRS en bas de chez moi avec un écran!
    T'es à Nation ? J'arrive !
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre du Club

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 69
    Points
    69
    Par défaut
    Ok j'ai trouvé mon erreur a force de remuer tout le code. Elle venait de la suppression d'un element de la liste :
    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
    struct AStar_liste_t *AStar_SupprimerElement(struct AStar_liste_t *AStar_liste, struct AStar_noeud_t *AStar_noeud)
     
    {
      struct AStar_liste_t *AStar_liste_aux1, *AStar_liste_aux2;
      int AStar_trouve;
      printf("AStar_SupprimerElement...\n"); 
      AStar_trouve = false;
      AStar_liste_aux1 = AStar_liste;
      if (AStar_MemeSituation(AStar_noeud,AStar_liste_aux1->AStar_val))
      	{
       	AStar_liste = AStar_liste->AStar_suiv;
    	free(AStar_liste_aux1);
        	AStar_trouve = true;
      	}
      	else
      		{
      		while((AStar_liste_aux1->AStar_suiv != NULL)&&(AStar_trouve == false))
      			{
        			if (AStar_MemeSituation(AStar_noeud,AStar_liste_aux1->AStar_suiv->AStar_val))
        				{
    				AStar_liste_aux2 = AStar_liste_aux1->AStar_suiv;
    				AStar_liste_aux1 -> AStar_suiv = AStar_liste_aux1->AStar_suiv->AStar_suiv;
          				free(AStar_liste_aux2);
          				AStar_trouve = true;
        				}
     		   		else
     		  			{
          					AStar_liste_aux1 = AStar_liste_aux1->AStar_suiv;
        					}
     		 	}
     		 }
      return(AStar_liste);
    }
    A la ligne : 'AStar_liste_aux2 = AStar_liste_aux1->AStar_suiv;'
    j'avais 'AStar_liste_aux2 = AStar_liste->AStar_suiv;'
    Hors sa foutait le bordel au bout d'un moment

  6. #6
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    tte façon j'aurai eu un segmentation fault en attribuant les valeur a ce nouveau noeud
    A vrai dire pas toujours tout dépend de l'exécution mais il arrive parfois que le segfault se produise après l'éxécution et pas au moment ou il devrait arriver.

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

Discussions similaires

  1. Cannot access memory
    Par kimikou dans le forum C
    Réponses: 2
    Dernier message: 19/04/2011, 08h53
  2. Réponses: 15
    Dernier message: 21/01/2007, 22h47
  3. Réponses: 7
    Dernier message: 16/06/2006, 11h09
  4. Réponses: 22
    Dernier message: 28/04/2006, 10h58
  5. "Access violation" apres utilisation des compos BD
    Par bahaa dans le forum Bases de données
    Réponses: 1
    Dernier message: 06/10/2005, 07h59

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