begin process at 2012 05 28 14:52:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

bug incompréhensible


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

bug incompréhensible

samedi 27 novembre 2004 à 20:21:16 | bug incompréhensible

graall

Bonjour à tous,

Je viens de découvrir les classes en c++ et j'ai créé mon premier programme les utilisant mais il y a un probléme à l'exécution : la variable 'niveau' qui devrait afficher '3' affiche '255' :


/* main.cpp : */
#include "ressource.hpp"

int main()
{
eleve moi(2,"Arthur","Martin",3,4);
moi.afficher();
getch();
}


/* ressource.hpp */
#ifndef RESSOURCE_HPP
#define RESSOURCE_HPP

#include <conio.c>
#include <iostream>
using namespace std;
#include "eleve.hpp"

#endif


/* eleve.hpp */
class eleve
{
private :
int id;
char nom[200];
char prenom[200];
int niveau;
int classe;

public :
eleve(int id_,char nom_[200],char prenom_[200],int niveau_,int classe_);
void afficher();
};

eleve::eleve(int id_,char nom_[200],char prenom_[200],int niveau_,int classe_)
{
id = id_;
niveau = niveau_;
classe = classe_;
for (int i=0;i<=sizeof(nom);i++) // transfert de 'nom_' vers 'nom'
{
nom[i] = nom_[i];
}
for (int i=0;i<=sizeof(nom);i++) // transfert de 'prenom_' vers 'prenom'
{
prenom[i] = prenom_[i];
}
}
//-----
void eleve::afficher()
{
cout << "ID : " << id << endl;
cout << "NOM : " << nom << endl;
cout << "PRENOM : " << prenom << endl;
cout << "NIVEAU : " << niveau << endl;
cout << "CLASSE : " << classe << endl;
}


Je n'y comprends rien.
(j'utitilise Dev-C++ 4.9.8.9 Beta)

Merci de votre aide.
samedi 27 novembre 2004 à 21:35:41 | Re : bug incompréhensible

luhtor

Réponse acceptée !
C'est normal, remplace tes boucles fort par ca:
for (int i=0;i < sizeof(nom);i++) // transfert de 'nom_' vers 'nom'
{
nom[i] = nom_[i];
}
for (int i=0;i < sizeof(nom);i++) // transfert de 'prenom_' vers 'prenom'
{

Cad enlève les inégalité larges. Car tu dépassais la taille du tableau et comme en mémoire c'est ton entier qui suit, il se fait a moitié écrasé, et donc ca donne une valeur délirante.
samedi 27 novembre 2004 à 22:05:43 | Re : bug incompréhensible

luhtor

Réponse acceptée !
Autrement, je viens de passer du temps sur ton code car il y avait des trucs que je comprenais pas avec les chars, voici une version du meme code modifié, regardes:



#include <conio.c>
#include <iostream>
using namespace std;

class eleve
{
public :
int id;
char *nom;
char *prenom;
int niveau;
int classe;

public :
eleve(int id_,char nom_[],char prenom_[],int niveau_,int classe_);
eleve() { }
~eleve() { }
void afficher();
};

int main()
{
eleve moi(2,"Arthur","Martin",3,4);
eleve moi2(3,"Luhtor","Huss",6,4);
moi.afficher();
moi2.afficher();
getch();
return 0;
}

eleve::eleve(int id_,char *nom_,char *prenom_,int niveau_,int classe_)
{
id = id_;
niveau = niveau_;
classe = classe_;
nom = new char[10];
prenom = new char[10];
strcpy(nom, nom_);
strcpy(prenom, prenom_);
}


void eleve::afficher()
{
cout << "ID : " << this->id << endl;
cout << "NOM : " << this->nom << endl;
cout << "PRENOM : " << this->prenom << endl;
cout << "NIVEAU : " << this->niveau << endl;
cout << "CLASSE : " << this->classe << endl;
}


Les "this" sont pas nécessaires mais je les mets systématiquement, question de visibilité.
samedi 27 novembre 2004 à 22:13:35 | Re : bug incompréhensible

luhtor

Réponse acceptée !
Décidément, deux dernières choses utiles:


nom = new char[10];
prenom = new char[10];


remplace le par:


nom = new char[strlen(nom_)+1];
prenom = new char[strlen(prenom_)+1];


Ca devrait marcher, et ca évitera de prendre de la mémoire pour rien et c'est totalement dynamique maintenant.
samedi 27 novembre 2004 à 22:14:19 | Re : bug incompréhensible

luhtor

Réponse acceptée !
un oubli: strlen() nécessite #include <string.h>
dimanche 28 novembre 2004 à 08:52:37 | Re : bug incompréhensible

graall

Merci beaucoup pour tous vos message !!!
dimanche 28 novembre 2004 à 15:51:22 | Re : bug incompréhensible

vecchio56

Administrateur CodeS-SourceS
Si tu veux un truc correct, enleve le #include <conio.c>
Tu fais des new dans le constructeur, il fait libérer ca dens le destructeur
Tu es en C++, donc n'inclus pas <string.h> mais <cstring>

Pour ton probleme du départ, il ne faut pas que tu utilise sizeof sur un pointeur, ca donne toujours 4 en 32 bits.


Cette discussion est classée dans : int, id, niveau, prenom, eleve


Répondre à ce message

Sujets en rapport avec ce message

Pb de strcpy et de char tab[i][j] [ par fred23 ] Bonjour,J'ai ecrit les code suivant mais le strcpy ne me donne rien.Qui pourrais me dire pourquoi.?J'ai repéré la ligne avec une fleche.Merci pour vot Probleme de creation de fichier avec DevC++ BloodShed 4.9.8.0 [ par Anysse ] Bonjour, donc moi j ai un petit probleme avec la creation d un fichier en utilisant des fonctions de haut niveau : fopen et fclose, lors de la compila reservation de la memoire [ par khalid_trunks ] salut ts le monde.je debute en c++,j'ai fais une petite simple application( gestion d'appelles)....je sais po grand chose en c++.ben j'ai fais mon pro probleme avec une boite de dialogue [ par anonyme_man_in_this_world ] salut !! ça sera simpa si vous m'aidiez a corriger ce code ******************************************************************************* # tableau 2 dimension en C [ par Babar51 ] voila je cherche a modifié une entrée dans un tableau a 2 dimension en C ... j ai essayé le code suivant mais je n obtien que des echec ... en bon deb Erreur conversion from `Sportif*' to non-scalar type `Sportif' requested [ par lordskyser1 ] Bonjour,je débute en C++ et je tente de compiler ma première classe sans y arriver, car je n'arrive pas à comprendre le message d'erreur de dev c++.he probleme dans une ecriture de fichier [ par hisoka56 ] bon salut a tous, j'ai un petit probleme d'ecriture dans un fichier dans uen fonction qui permet de sauvegarder un niveau voila le fichier de niveaux tableau de caracteres [ par infodaoudi ] bonjour,j'ai une classeclass fich{int id;char *fich}je veux initialiser une liste de cette classeFich::Fich(int a){for(int i=0;i{   id=i;   fich= "<fo metre der donner en ordre crosante ??? [ par li ] Comment metre des donner en ordre ???Mon code : ma class; class colision{public: <b IA Min-Max adaptée au puissance 4 [ par elfdu71 ] Bonjour, voici mon problème : je n'arrive pas à construire l'arbre min max et à faire remonter la colonne qui doit être jouée.J'ai : +une fonction gai


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,264 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales