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 :

Erreur de Segmentation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Par défaut Erreur de Segmentation
    Bonjour!
    et oui encore un sujet sur les erreur de segmentation! bon je précise que je sais ce que c'est mais la réponse n'est pas ouferte surtout quand on a pas de debugger ( je suis sous linux et tout ne marche po super...je travail sous kwrite :S

    alors voila mon probleme

    je dispose d'un tableau 3D allé par mes soins en 1D
    on va considérer ce tbleau sous le nom Grid.Tab3D[...]
    Grid.varx Grid.vary et Grid.varz constitue les tailles de ce tableau

    bon graçon ^^ je veux accéder à une case de ce tableau
    je posse donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const int pos = x  +y*(Grid.varx)  +z*(Grid.vary)*(Grid.varx);
    correspondante a la position ds le talbeau 1D de [x][y][z] ( position 3D) ( j'ai bien vérifié que l'indice ne dépasse pas le tableau)

    jusque là tout se passe bien
    mais ( il y a toujours un mais... ) dès que je veux utiliser cette valeur ( attention seulement au bout du 800 éme acces...c'est beaucoup mais je suis pas encore au bout ( 959)), même avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("pos = %i \n",pos);
    je retrouve le temp aimé, l'unique erreur de segmentation, seulement sur un affichage...alors si quelqu'un à une idée..bha siouplé dite^^

    merchi!

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Rastacouéne
    Bonjour!
    et oui encore un sujet sur les erreur de segmentation! bon je précise que je sais ce que c'est mais la réponse n'est pas ouferte surtout quand on a pas de debugger ( je suis sous linux et tout ne marche po super...je travail sous kwrite :S

    alors voila mon probleme

    je dispose d'un tableau 3D allé par mes soins en 1D
    on va considérer ce tbleau sous le nom Grid.Tab3D[...]
    Grid.varx Grid.vary et Grid.varz constitue les tailles de ce tableau

    mon, bon graçon ^^ je veux accéder à une case de ce tableau
    je posse donc :
    const int pos = x +y*(Grid.varx) +z*(Grid.vary)*(Grid.varx); correspondante a la position ds le talbeau 1D de [x][y][z] ( position 3D)

    jusque là tout se passe bien
    mais ( il y a toujours un mais... ) dès que je veux utiliser cette valeur ( attention seulement au bout du 800 éme acces...c'est beaucoup mais je suis pas encore au bout ( 959)), même avec :
    printf("pos = %i \n",pos);
    je retrouve le temp aimé, l'unique erreur de segmentation, seulement sur un affichage...alors si quelqu'un à une idée..bha siouplé dite^^

    merchi!
    Moi, j'aurais plutôt dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const int pos = x*(Grid.vary)*(Grid.varz) + y*(Grid.varz) + z;
    qui me semble plus logique (du moins, c'est ce que j'attends d'un tableau 3D), mais l'erreur de segmentation ne vient pas de là.

    En ce qui concerne l'erreur de segmentation, je vois pas comme ça. Aurais-tu un morceau de code minimal et compilable qui reproduit le problème à nous donner?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Par défaut
    pour l'acces tout cela dépend de ka façon d'ont j'accéde de maniére global a ma vase , tout ce qu'il faut c'est rester danbs les limites du tableau

    quand au morceau de code, je peux pas vous le filer, car tout ceci fait parti d'un gros projet de lancer de rayon dans lequel je me suis inséré. enfin bon...voila ce que je peux donner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for(l = min[0] ; l <max[0] ; l++)
    		{
    			for(m = min[1] ; m < max[1] ; m++)
    			{
    				for( n = min[2] ; n < max[2] ; n++)
    				{
    						ajouterId(i,l,m,n);
    				}
    			}
    		}
    ceci correspond a une boucle pour ajouter des boites englobantes dans mon tableau, je parcours les x,y et z stocké respectivement dans [0] [1] et [2]

    suis dans ajout id , la simplification donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            const int pos = x  +y*(Grid.varx)  +z*(Grid.vary)*(Grid.varx);
    	printf("pos = %i \n",pos);
    normalement tout devrai bien se passer, mais le plus surprenant est que l'erreur ne viens que très tard dans les boucles...cela peux venir d'un faille mémoire?

  4. #4
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salux

    C'est classique : ce n'est pas parce que le programme tourne qu'il n'ya pas d'erreurs. Il peut yavoir une erreur dans un programme et ne jamais s'en rendre compte -- les comportements indeterminés ne font pas forcement planter le processus.

  5. #5
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Il faudrait :

    - Les déclarations des variables : min, max
    - La fonction ajout_id

    Jc

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Par défaut
    alors...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int min[3],max[3];
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    static void ajouterId(int id,int x, int y, int z)
    {
    	const int pos = x  +y*(Grid.varx)  +z*(Grid.vary)*(Grid.varx);
    	printf("pos = %i \n",pos);
    merci de regarder^^

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Par défaut
    Citation Envoyé par Gruik
    Salux

    C'est classique : ce n'est pas parce que le programme tourne qu'il n'ya pas d'erreurs. Il peut yavoir une erreur dans un programme et ne jamais s'en rendre compte -- les comportements indeterminés ne font pas forcement planter le processus.

    Je fais comment pour situer ces comportements indéterminés ?

Discussions similaires

  1. Erreurs de segmentation !
    Par anti-conformiste dans le forum Applications et environnements graphiques
    Réponses: 16
    Dernier message: 18/10/2005, 11h11
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

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