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 "stack arround variable .. corrupted"


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 22
    Par défaut problème "stack arround variable .. corrupted"
    Bonjour a tous,

    Voila j'ai un probleme avec le programme que j'essaye de faire.
    Ce programme un sensé modifier quelque valeurs d'un tableau
    dans une fonction. Tous se passe bien jusqu'a la fin ..."Appuyer
    sue une touche pour continuer" et la j'ai le message d'erreur:
    "Stack arround the variable tab1 was corrupted" mais je ne vois pas
    ou est le probleme.
    J'utilise Visual C++ 2003.

    Le code :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    #include <iostream>
    using namespace std;
    	void affichage(int tab[10]); 
    	int test(int temp[10]); // fonction qui modifie qq valeur dans le tableau
     
    int main() {
    	int tab1[10];
    	tab1[0] = 1;
    	tab1[1] = 2;
    	tab1[2] = 3;
    	tab1[3] = 4;
    	tab1[4] = 5;
    	tab1[5] = 6;
    	tab1[6] = 7;
    	tab1[7] = 8;
    	tab1[8] = 9;
    	tab1[9] = 10;
     
    	int *pteur = tab1;
     
    	*pteur = test(tab1);
     
    	tab1[10] = *pteur;
     
            affichage(tab1);
     
    system("pause");
    return 0;
    }
     
    void affichage(int tab[10]) {
    	int i = 0;
    	while (i < 10) {
    		cout << tab[i] << " ";
    		i++;
    	}
    }
     
    int test(int temp[10]) {
    	int *pteurtemp = temp;
    	temp[1] = 66;
    	temp[5] = 66;
     
    	return *pteurtemp;
    }
    Merci de bien vouloir m'aider.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu dépasses (le dernier élément est le numéro 9).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 22
    Par défaut
    Ben c'est un tableau de 10 élément donc si je
    met 9 j'aurais pas le dernier (ou alors j'ai pas compris quel ligne
    je dois modifier)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
    	int *pteur = tab1;
     
    	*pteur = test(tab1);
    	tab1[9] = *pteur;      // si c celle la la 10 éme valeur est pas affiché(sa           
                                         //affiche un 1 aulieu d'un 10...
    affichage(tab1);
     
    system("pause");
    return 0;
    }
    ...
    Si je pouvais avoir plus de precision sur ce qu'il faut que je modifie...
    Merci bien.

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    0 === 1er
    ...
    9 === 10e
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    affiche un 1 aulieu d'un 10...
    C'est pourtant le résultat correct, à la suite de tes manipulations de pointeur dans tous les sens.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 22
    Par défaut
    Je vais peut-etre passer pour un relou
    mais je dois dire que je pige pas ce qui faut que je modifie
    (je sais que le 1er c'est zero donc le 10ème 9 ) mais si je modifie
    cette ligne **(voir code) et bien au moment de l'affichage j'ai mes chiffre
    qui s'affiche mais pour le dernier, il y a un 1 qui apparait a la place
    du 10... alors que quan je modifiai pas la ligne ben tout s'affichais comme je voulais (avec le 10 a la fin) mais j'avais un message d'erreur au moment ou
    j'appuyai sur une touche (Appuyer sur une touche pr continuer).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	int *pteur = tab1;
     
    	*pteur = test(tab1);
    	tab1[9] = *pteur;           // cette ligne
    affichage(tab1);
     
    system("pause");
    return 0;
    }
    Merci de m'aider mais la je sais pas si j'ai modifier la
    bonne ligne puisque j'ai un autre probleme a la place...

    Je vois pas pourquoi c'est le resultat corect puisque
    je veux afficher les nombre :
    1 66 3 4 5 66 7 8 9 10
    je comprend pas pourquoi sa m'affiche un 1 aulieu d'un 10

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,

    quand tu écris
    pteur pointe sur la 1ère valeur du tableau tab1, donc tab1[0]

    donc, quand plus loin tu écris
    ça revient à faire
    et comme tab1[0] = 1....

    Et pour ton problème, avant ta modification, tu avais
    or, tab[10] n'existe pas en définissant ton tableau comme tu l'as fait
    seuls les indices 0 à 9 sont valides

    (Accessoirement, pour remplir ton tableau tab1, tu aurais pu faire une boucle : plus rapide à écrire, moins long à lire, et tout aussi clair à comprendre, sinon plus)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 22
    Par défaut
    Merci beaucoup pour ta reponse detaillée thewho,
    (merci aussi au autres mais j'avoue que j'avais besoin de details)

    en fait j'avais pas compris que le pointeur ne pointais que
    sur la première valeur du tableau.
    Donc je vais resoudre mon problème.

    Sinon pour ce qui est du remplissage du tableau, c'et vrai
    que c'est plus rapide de faire une boucle mais c'etait
    qu'un test donc j'ai fait sa vite fait en copier coller
    puisque de toute façon mon programme ne sert a rien.

    Merci

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

Discussions similaires

  1. Problème "LoadModule ssl_module modules/mod_ssl.so"
    Par ldcarpathes dans le forum Apache
    Réponses: 9
    Dernier message: 24/01/2008, 11h07
  2. Variable avec quotes(simple ou double)dans un input
    Par -Neo- dans le forum Langage
    Réponses: 1
    Dernier message: 25/06/2007, 11h23
  3. [Mail] Variable et quote
    Par Anone dans le forum Langage
    Réponses: 4
    Dernier message: 29/09/2006, 18h04
  4. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 15h59
  5. quotes dans une variable
    Par requiemforadream dans le forum ASP
    Réponses: 3
    Dernier message: 09/05/2005, 09h55

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