Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4853 connectés 

 


Dernière réponse
Sujet : [C] plantage à l'execution
LeGreg [citation]
Certains programmes marchent avec des bugs enormes...
[/citation]
Mon prof il appelait ca les programmes qui "marchent par erreur"  
;).
Evidemment au bout d'un moment il finit par planter et le programmeur debutant il comprend pas: "ben ca marchait avant.."
 
A+
Legreg

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
LeGreg [citation]
Certains programmes marchent avec des bugs enormes...
[/citation]
Mon prof il appelait ca les programmes qui "marchent par erreur"  
;).
Evidemment au bout d'un moment il finit par planter et le programmeur debutant il comprend pas: "ben ca marchait avant.."
 
A+
Legreg
BENB

la viper a écrit a écrit :

bon ben tu n'as plus de probleme alors !
il faut tout de meme faire attention à ces allocations de memoire.
 
en fait, ici ton typedef remplace tous tes OBJ qui se trouve dans ton code par struct{...}
hors suivant les compilo, je sais pas s'ils acceptent tous de creer directement un pointeur desss. deux cas existe .. soit le compilo comprend OBJ comme une variable et donc il es possible de faire un pointeur dessus, soit il comprend OBJ comme une declaration et là normalement ca devrait pas fonctionner.
en fait, à ce niveau là et avec ce code tu es tout de meme tributaire du bon vouloir du compilo ... moi je te conseille d'ecrire du code un peu plus explicite .. dans tous les cas tu y gagnes, tu comprends mieux ton code et tu sais mieux comment le compilo va reagir..




 
? ? ?
typedef defini un type. donc OBJ est un type
ca ne concerne pas le preprocesseur il n'y a pas de remplacement c'est un synonyme qui est genere.
 
en C on fait en general
typedef struct Sobj {
...
} obj;
et obj = struct Sobj
evidement en C++ il suffit de faire struct OBJ pour definir OBJ...

BENB Turbo C++ c'est du Dos, il ne voit pas toutes les erreurs sur la memoire...
 
VC++ en mode console c'est du Windows et la y + de protections.
 
Certains programmes marchent avec des bugs enormes...
gilou

Pschitt a écrit a écrit :

Non mon code sous TurboC est texto celui la :
 
typedef struct {  
int noDossard;  
char numTel[10];  
float vitesse;  
char nom[25];  
} OBJ;  
 
OBJ * objet1;  
objet1=NULL;  
 
objet1->noDossard=1
 
Et ça marche, je viens juste de le tester de nouveau




 
Ca marche peut etre, mais pour une mauvaise raison, car ce code est errone: objet1 n'a pas ete alloue, ert donc tu ne peux pas en utiliser ses membres.
A+,

la viper bon ben tu n'as plus de probleme alors !
il faut tout de meme faire attention à ces allocations de memoire.
 
en fait, ici ton typedef remplace tous tes OBJ qui se trouve dans ton code par struct{...}
hors suivant les compilo, je sais pas s'ils acceptent tous de creer directement un pointeur desss. deux cas existe .. soit le compilo comprend OBJ comme une variable et donc il es possible de faire un pointeur dessus, soit il comprend OBJ comme une declaration et là normalement ca devrait pas fonctionner.
en fait, à ce niveau là et avec ce code tu es tout de meme tributaire du bon vouloir du compilo ... moi je te conseille d'ecrire du code un peu plus explicite .. dans tous les cas tu y gagnes, tu comprends mieux ton code et tu sais mieux comment le compilo va reagir..
Pschitt Non mon code sous TurboC est texto celui la :
 
typedef struct {  
int noDossard;  
char numTel[10];  
float vitesse;  
char nom[25];  
} OBJ;  
 
OBJ * objet1;  
objet1=NULL;  
 
objet1->noDossard=1
 
Et ça marche, je viens juste de le tester de nouveau
la viper pour revenir à ta question
 
NON, le compilo ne fait pas d'allocation mémoire à ta place. (ce serait trop beau .. mais ce ne serait pas rigoureux)
 
tu as du faire un ...
OBJ* ptr = (OBJ*)malloc(sizeof(OBJ));
 
c'est ca ?
la viper heu moi j'm'y serais pris autrement.
 
bon admettons.
typedef struct {  
int noDossard;  
char numTel[10];  
float vitesse;  
char nom[25];  
} OBJ;  
 
OBJ ma_structure_et_non_ma_classe;
OBJ* ptr_struct = &ma_structure_et_non_ma_classe;
 
là tu as initialisé une variable et initialisé un pointeur qui "pointe" sur cette dite variable.
 
A ce moment et seulement à ce moment, tu as des tableaux qui sont "crées" dans ta mémoire.
 
avec ta méthode .. tu "pointais" vers une structure qui n'etait pas 'initialisée' donc ses zones memoire n'existait pas encore.
 
enfin j'coirs vu l'heure et sur un mal entendu j'peux me tromper.
Pschitt OK
 
Je suis vert, ça fait un moment que je galère
 
En fait c'est un code que j'ai récupéré de TurboC avec lequel il ne plantait pas malgré ma grosse bourde ?
 
Faisait il l'allocation à ma place ?
Bizarre
 
Enfin bref c'est solutionné  
 
Merci
verdoux SI !
Pschitt Bon en niveau 4 ça passe
 
Je vous détaille un peu le code
 
Voici mon type :  
 
typedef struct {
int noDossard;
char numTel[10];
float vitesse;
char nom[25];
} OBJ;
 
OBJ * objet1;
objet1=NULL;
 
objet1->noDossard=1; !! PLANTAGE !!
 
Je crois qui doit manquer un malloc quelque part ? NON ?
verdoux objet1=NULL; c'est pas vraiment un objet bien initialisé :D
Pschitt C'est en console et en niveau 3
 
mes pointeurs sont bien initialisés :
 
OBJ * objet1;
objet1=NULL;
 
Pour ce qui est de mon code j'ai 2 sources :
 
 1 -> fonctions avec son header  
 1 -> main
 
vous les balancer m'est difficile car bien que ce soit un projet des + modestes y'en + de 100 lignes
gilou >Compil et link passe nickel, pas même 1 warning  
 
T'as essaye avec les warning en niveau 4??
A+,
la viper bah c'est dur de repondre comme ca ... mais j' suis pret à parier que ca vient d'un pointeur  :pt1cable:  
non initialisation
violation de partage memoire ...
bref, un bug imputable au programmeur
 
c'est un mode console / API / MFC .. ??
 
montre nous ton code.
Pschitt Mon projet(sous VC++6) me génère un exe qui plante à chaque fois que j'utilise un type défini dans un fichier en tête lui même inclu dans mon main correctement.        
 
Compil et link passe nickel, pas même 1 warning
 
N'y comprends rien :(
 
Alors si une âme charitable aurait un tuyau ?
 
Merci

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)