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

  FORUM HardWare.fr
  Programmation
  C++

  Quelles sont les causes de "Segmentation fault" ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Quelles sont les causes de "Segmentation fault" ?

n°643385
drvins
Posté le 15-02-2004 à 19:05:46  profilanswer
 

Ben mon programme compile bien mais quand je l'exécute, après avoir rentré quelques valeures, j'ai un "Segmentation fault" !
 
Il faut que je regarde quoi pour éviter ça ?


Message édité par drvins le 15-02-2004 à 19:06:09
mood
Publicité
Posté le 15-02-2004 à 19:05:46  profilanswer
 

n°643388
Taz
bisounours-codeur
Posté le 15-02-2004 à 19:06:35  profilanswer
 

un pointeur qui se balade ou il faut pas

n°643399
drvins
Posté le 15-02-2004 à 19:18:48  profilanswer
 

ça dois venir de mon constructeur.
 
En fait je vois pas trop comment faire, je dois simplement initialiser un tableau.
 
J'ai ça pour le constructeur :
 

Code :
  1. polynome::polynome()
  2. {
  3.     for (int i=0; i<n; i++)
  4.     {
  5.      Coef[i]=0;
  6.     }
  7. }


 
Mais ça ne fonctionne pas...


Message édité par drvins le 15-02-2004 à 19:32:05
n°643403
matafan
Posté le 15-02-2004 à 19:20:43  profilanswer
 

Comment ton tableau est-il défini ?

n°643405
Taz
bisounours-codeur
Posté le 15-02-2004 à 19:22:07  profilanswer
 

bon allez, tu vas là http://sgi.com/tech/stl/Vector.html et on en parlera plus

n°643407
drvins
Posté le 15-02-2004 à 19:23:04  profilanswer
 

matafan a écrit :

Comment ton tableau est-il défini ?


Dans la classe, en private avec int *Coef.
 
Désolé si je suis complètement à coté de la plaque mais c'est le premier truc que je fais avec les classes et j'ai pas encore tout pigé.

n°643408
Taz
bisounours-codeur
Posté le 15-02-2004 à 19:24:13  profilanswer
 

ben ça change rien
 
 
int *Coef;
 
Coef[i] = 0;
 
si tu percutes pas ...

n°643409
drvins
Posté le 15-02-2004 à 19:26:04  profilanswer
 

taz a écrit :

ben ça change rien
 
 
int *Coef;
 
Coef[i] = 0;
 
si tu percutes pas ...


Désolé mais... tu peux expliquer ? :D

n°643410
chrisbk
-
Posté le 15-02-2004 à 19:27:12  profilanswer
 

drvins a écrit :


Désolé mais... tu peux expliquer ? :D


 
tu vois pas le probleme ?

n°643411
drvins
Posté le 15-02-2004 à 19:27:55  profilanswer
 

Pas vraiment :(
Comme je l'ai dit, c'est la première fois que j'utilise les classes et tout ça est un peu vague pour moi.


Message édité par drvins le 15-02-2004 à 19:28:30
mood
Publicité
Posté le 15-02-2004 à 19:27:55  profilanswer
 

n°643412
matafan
Posté le 15-02-2004 à 19:28:05  profilanswer
 

Ben don Coef est un pointeur, pas un tableau. Il faut que tu alloues de l'espace dans ton constructeur : Coef = new int[10];

n°643414
Taz
bisounours-codeur
Posté le 15-02-2004 à 19:29:44  profilanswer
 

j'ai presque envie de faire une pseudo-calss vector, sauf que operator[] ne gueulerait jamais, si l'indice est hors-limite, gros message d'erreur et un lien vers un cours de C++

n°643417
drvins
Posté le 15-02-2004 à 19:31:42  profilanswer
 

matafan a écrit :

Ben don Coef est un pointeur, pas un tableau. Il faut que tu alloues de l'espace dans ton constructeur : Coef = new int[10];


 
Et je peux faire ça comme ça ? (en tout cas, ça ne va pas non plus).
 

Code :
  1. polynome::polynome()
  2. {
  3.     Coef=new int[n];
  4.     Degre=new int[n];
  5.     for (int i=0; i<n; i++)
  6.     {
  7.      Coef[i]=0;
  8.      Degre[i]=0;
  9.     }
  10. }

n°643421
Taz
bisounours-codeur
Posté le 15-02-2004 à 19:36:58  profilanswer
 

/à moi même et à ceux qui veulent plus
bof, ça vaut bien mieux 2 jolis std::vector correctement initialisés comme il faut. et c'est plus court syntaxiquement. cela dit, il me semble que la meilleur façon de mettre en oeuvre un polynôme, c'est quelque chose du genre std::map<int, double>  degre -> coefficient

n°643425
drvins
Posté le 15-02-2004 à 19:43:16  profilanswer
 

Pour faire le polynome, j'utilise deux vecteurs : un qui représentent le coefficient et l'autre le degré.
 
Mais ça on s'en fout, je veux juste ne plus avoir ce problème de "Segmentation fault" :cry:


Message édité par drvins le 15-02-2004 à 19:43:23
n°643428
Taz
bisounours-codeur
Posté le 15-02-2004 à 19:44:54  profilanswer
 

ben apprends à te servir des pointeurs d'abord ou écoute les solutions qu'on te propose.
 
dans tous les cas j'espère que t'es conscient que des vecteurs sont  particulièrement inefficaces en occupation mémoire pour représenter des polynomes

n°643439
drvins
Posté le 15-02-2004 à 19:52:32  profilanswer
 

Mais comment est-ce que peut faire avec ce que j'ai déjà fait ?

n°643449
verdoux
And I'm still waiting
Posté le 15-02-2004 à 20:00:54  profilanswer
 

drvins a écrit :

Mais comment est-ce que peut faire avec ce que j'ai déjà fait ?


Tu jettes tout.

n°643450
drvins
Posté le 15-02-2004 à 20:01:10  profilanswer
 

Et quand j'avais essayé mon code au début, je n'avais psa fait de constructeur, mais j'avais les pointeurs *Coef, *Degre dans private, et ça fonctionnait bien sauf qu'a la fin, le programme faisait un "Segmentation fault" mais tout le traitement avec les vecteurs était fait (addition, multiplication de polynômes).
 
Comment ça se fait que sans constructeur, ça fonctionnait ? et pourquoi ça ne va plus maintenant ?

n°643451
chrisbk
-
Posté le 15-02-2004 à 20:01:54  profilanswer
 

de la chance

n°643452
Taz
bisounours-codeur
Posté le 15-02-2004 à 20:04:51  profilanswer
 

chrisbk a écrit :

de la chance

t'as mis des destructeurs ?
 
en tout cas, vu comme c'est parti, y a de la copie de surface dans tous les sens, c'est un véritable massacre [:joce]

n°643455
drvins
Posté le 15-02-2004 à 20:10:27  profilanswer
 

Mon algorithme va très bien mais le but de l'exercice est de mettre ça dans un type de données abstrait c'est tout. Et il me manque plus qu'un constructeure et ça devrait aller :pt1cable:

n°643456
Taz
bisounours-codeur
Posté le 15-02-2004 à 20:13:11  profilanswer
 

ta oublié l'étape « apprendre le C++ » dans ta feuille de route.

n°643475
drvins
Posté le 15-02-2004 à 20:31:52  profilanswer
 

Dans le constructeur, si l'ont regarde mon exemple, j'y ai mis Coef[i]=0, je me suis basé sur celui de mon cours mais est-ce qu'il faut donner obligatoirement une valeure pour chaque "case" du tableau.
 
Je comprend pas car je vais de toute façon écraser ces valeures...

n°643487
Taz
bisounours-codeur
Posté le 15-02-2004 à 20:36:51  profilanswer
 

tu rends compte que le problème n'est pas absolument pas là ? mais que tu ne comprends rien aux pointeurs et allocations dynamiques ?

n°643493
drvins
Posté le 15-02-2004 à 20:41:23  profilanswer
 

taz a écrit :

tu rends compte que le problème n'est pas absolument pas là ? mais que tu ne comprends rien aux pointeurs et allocations dynamiques ?


Oui et c'est ce que j'ai dis plus haut...

n°643497
Taz
bisounours-codeur
Posté le 15-02-2004 à 20:49:24  profilanswer
 

pourtant tu te concentres sur le fait que tu dois mettre des 0, alors que le problème est « où » les mettre

n°643501
drvins
Posté le 15-02-2004 à 20:53:36  profilanswer
 

Non, je me demande pourquoi les mettre ?
 
L'exemple du cours était avec des 0 mais sur le projet que je dois réaliser, j'ai pas besoin de donner des valeurs car c'est l'utilisateur qui dois les rentrer.


Message édité par drvins le 15-02-2004 à 20:53:59
n°643504
Taz
bisounours-codeur
Posté le 15-02-2004 à 20:58:44  profilanswer
 

mince alors.

n°643505
chrisbk
-
Posté le 15-02-2004 à 20:59:27  profilanswer
 

ca change tout

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Quelles sont les causes de "Segmentation fault" ?

 

Sujets relatifs
HELP !! segmentation fault... besoin d'aideHELP !! segmentation fault... besoin d'aide
Segmentation faultSegmentation fault a cause d'un fseek(monFichier,0,0)
Segmentation fault aléatoires !! 
Plus de sujets relatifs à : Quelles sont les causes de "Segmentation fault" ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR