Quelles sont les causes de "Segmentation fault" ? - C++ - Programmation
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 :
|
Mais ça ne fonctionne pas...
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
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é.
Marsh Posté le 15-02-2004 à 19:24:13
ben ça change rien
int *Coef;
Coef[i] = 0;
si tu percutes pas ...
Marsh Posté le 15-02-2004 à 19:26:04
taz a écrit : ben ça change rien |
Désolé mais... tu peux expliquer ?
Marsh Posté le 15-02-2004 à 19:27:12
ReplyMarsh 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.
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];
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++
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 :
|
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
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"
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
Marsh Posté le 15-02-2004 à 19:52:32
Mais comment est-ce que peut faire avec ce que j'ai déjà fait ?
Marsh Posté le 15-02-2004 à 20:00:54
ReplyMarsh 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 ?
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
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
Marsh Posté le 15-02-2004 à 20:13:11
ta oublié l'étape « apprendre le C++ » dans ta feuille de route.
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...
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 ?
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...
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
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.
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