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 :

Mystère insoluble dans programme archi-simple


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 11
    Points
    11
    Par défaut Mystère insoluble dans programme archi-simple
    Bonjour à tous,
    J'ai un tout petit programme super simple (en fait une sous-partie d'un plus gros programme) qui me pose un problème que je trouve hallucinant. Il s'agit d'assigner aux cases d'un tableau appelé "ligne" la valeur 1.
    Voilà le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for (i=1;i<=n;i++)
    {
        ligne[i]=1;
        printf("ligne(%d)=%d\n",i,ligne[i]);
    }
    printf("\n");
    // Vérification :
    for (i=1;i<=n;i++)
    {
        printf("ligne(%d)=%d\n",i,ligne[i]);
    }
    Quand n vaut 1, 2, 3, 4, 5 ou 7, les 2 printf me donnent la même chose :
    par exemple pour n = 4
    ligne(1)=1
    ligne(2)=1
    ligne(3)=1
    ligne(4)=1
    Quand n = 6 ou n >=8, ça ne me donne pas la même chose !!!
    par exemple pour n = 6, le 1er printf me donne
    ligne(1)=1
    ligne(2)=1
    ligne(3)=1
    ligne(4)=1
    ligne(5)=1
    ligne(6)=1
    Mais le 2ème me donne
    ligne(1)=0
    ligne(2)=0
    ligne(3)=1
    ligne(4)=1
    ligne(5)=1
    ligne(6)=1
    Ca me parait incompréhensible, j'ai beau le tourner dans tous les sens je ne vois pas quoi faire.
    Auriez-vous une idée ? Merci d'avance

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Qia,

    Comment est défini ton tableau ligne ?

    Ça sent le débordement (écriture hors de la zone réservée pour le tableau)

    Rappel : pour un tableau de taille n, les indices vont de 0 à n-1.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Merci de ta réponse.
    D'abord j'avais défini
    int ligne[n]
    puis j'ai pensé à cette histoire de débordement alors j'ai fait
    int ligne [n+1]

    Mais même avec le débordement, comment peut-il un coup dire
    ligne(1) = 1
    et juste après
    ligne(1) = 0

    ????

  4. #4
    Membre chevronné
    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
    Points : 1 750
    Points
    1 750
    Par défaut
    C'est ton for qui déborde !

    En C, le premier élément d'un tableau a pour indice 0.

  5. #5
    Membre actif Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Points : 293
    Points
    293
    Par défaut
    Le fait qu'il démarre à l'indice 1 au lieu de 0 ne pose pas de problème étant donné qu'il fait la même pour la relecture ...
    Par contre oui, il y a un débordement (que tu as apriori résolu en augmentant de 1 la taille de ton tableau) ...

    Peut on voir l'ensemble du code ? (les déclarations, initialisations, ...)

  6. #6
    Membre chevronné
    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
    Points : 1 750
    Points
    1 750
    Par défaut
    Citation Envoyé par brachior Voir le message
    Le fait qu'il démarre à l'indice 1 au lieu de 0 ne pose pas de problème étant donné qu'il fait la même pour la relecture ...
    Par contre oui, il y a un débordement (que tu as apriori résolu en augmentant de 1 la taille de ton tableau) ...

    Peut on voir l'ensemble du code ? (les déclarations, initialisations, ...)
    Oui, mais le P.O. dit qu'il s'agit d'un bout de code d'un plus gros programme. S'il fait déborder comme ça tous ses tableaux, il se peut que l'un d'eux écrase le début d'un autre.

Discussions similaires

  1. Les mystères des décimales dans un calcul simple
    Par deca2 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 10/08/2009, 21h24
  2. Réponses: 4
    Dernier message: 27/04/2009, 19h33
  3. bug dans programme d'extraction de données d'une page web
    Par youpimevla dans le forum Web & réseau
    Réponses: 11
    Dernier message: 31/08/2006, 10h02
  4. uses dans une unité simple
    Par izguit dans le forum Delphi
    Réponses: 7
    Dernier message: 01/06/2006, 15h28
  5. Attacher un fichier à un mail dans programme C++.
    Par Hamdi Hedhili dans le forum MFC
    Réponses: 5
    Dernier message: 24/11/2005, 16h21

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