Quelles sont les causes de "Segmentation fault" ?

Quelles sont les causes de "Segmentation fault" ? - C++ - Programmation

Marsh Posté le 15-02-2004 à 19:05:46    

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
Reply

Marsh Posté le 15-02-2004 à 19:05:46   

Reply

Marsh Posté le 15-02-2004 à 19:06:35    

un pointeur qui se balade ou il faut pas

Reply

Marsh Posté le 15-02-2004 à 19:18:48    

ç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
Reply

Marsh Posté le 15-02-2004 à 19:20:43    

Comment ton tableau est-il défini ?

Reply

Marsh Posté le 15-02-2004 à 19:22:07    

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

Reply

Marsh Posté le 15-02-2004 à 19:23:04    

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é.

Reply

Marsh Posté le 15-02-2004 à 19:24:13    

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

Reply

Marsh Posté le 15-02-2004 à 19:26:04    

taz a écrit :

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


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

Reply

Marsh Posté le 15-02-2004 à 19:27:12    

drvins a écrit :


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


 
tu vois pas le probleme ?

Reply

Marsh Posté le 15-02-2004 à 19:27:55    

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
Reply

Marsh Posté le 15-02-2004 à 19:27:55   

Reply

Marsh Posté le 15-02-2004 à 19:28:05    

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

Reply

Marsh Posté le 15-02-2004 à 19:29:44    

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++

Reply

Marsh Posté le 15-02-2004 à 19:31:42    

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. }

Reply

Marsh Posté le 15-02-2004 à 19:36:58    

/à 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

Reply

Marsh Posté le 15-02-2004 à 19:43:16    

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
Reply

Marsh Posté le 15-02-2004 à 19:44:54    

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

Reply

Marsh Posté le 15-02-2004 à 19:52:32    

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

Reply

Marsh Posté le 15-02-2004 à 20:00:54    

drvins a écrit :

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


Tu jettes tout.

Reply

Marsh Posté le 15-02-2004 à 20:01:10    

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 ?

Reply

Marsh Posté le 15-02-2004 à 20:01:54    

de la chance

Reply

Marsh Posté le 15-02-2004 à 20:04:51    

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]

Reply

Marsh Posté le 15-02-2004 à 20:10:27    

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:

Reply

Marsh Posté le 15-02-2004 à 20:13:11    

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

Reply

Marsh Posté le 15-02-2004 à 20:31:52    

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...

Reply

Marsh Posté le 15-02-2004 à 20:36:51    

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

Reply

Marsh Posté le 15-02-2004 à 20:41:23    

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...

Reply

Marsh Posté le 15-02-2004 à 20:49:24    

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

Reply

Marsh Posté le 15-02-2004 à 20:53:36    

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
Reply

Marsh Posté le 15-02-2004 à 20:58:44    

mince alors.

Reply

Marsh Posté le 15-02-2004 à 20:59:27    

ca change tout

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed