probleme con avec new - C++ - Programmation
Marsh Posté le 21-03-2004 à 15:44:20
Library a écrit : cela compile bien. |
Ouais, ça compile.
Mais c'est tout.
Et puis *(config.donnees)
Marsh Posté le 21-03-2004 à 15:53:44
verdoux a écrit : |
*(config.donnees) ca fait segmentation fault aussi
mais c'est vrai que j'ai pas vérifié qu'il y avait pas de segmentation fault avec mon exemple du début...
alors, c'est quoi le secret pour créer un tableau à deux dimensions en C++ ?
Marsh Posté le 21-03-2004 à 16:10:01
int ** a;
*a=new int[3];
tu le sens pas bizarre le *a là ?
Marsh Posté le 21-03-2004 à 16:15:50
c'est vrai que ca fait un peu bizzare
mais vu que ca compilait j'étais content
pour l'instant à l'aide de ce que j'ai trouvé sur internet j'en suis à :
Code :
|
mais y a toujours une segmentation fault
Marsh Posté le 21-03-2004 à 16:18:48
ben tu foires ailleurs qu'est-ce qu'on y peut ...
t'es sur que ton j dépasse pas nb_exemples-1 ?
Marsh Posté le 21-03-2004 à 16:31:00
ca foire ailleurs que lorsque je rentre les données apparamment
à la fin j'ai mis
Code :
|
à ce moment ca m'affiche "ok3ok20.0193785
Segmentation fault"
mais si je mets
Code :
|
ca affiche juste "segmentation fault"
bizzare bizzare...
Marsh Posté le 21-03-2004 à 16:32:47
1) pas la peine de fermer les fichier, le destructeur le fait tout seul
2) mais std::flush après ton dernier ok
3) montre le prototype de ta fonction et la définition de ta classe config
Marsh Posté le 21-03-2004 à 16:37:41
avec le std::flush ca m'affiche bien ok3ok2ok avant de faire la segmentation fault
le prototype et la définition sont la :
Code :
|
Marsh Posté le 21-03-2004 à 16:40:13
dis-moi, tu serais pas un rigolo qui fait du C avec des class^struct enfin du C avec des cout en bref ...
ben prends ton débuggeur et trouve ou ça plante. sinon apprends le C++. on peut rien faire d'autre pour toi
Marsh Posté le 21-03-2004 à 17:00:21
ben j'ai aucune formation en programmation, j'ai tout appris tout seul avec juste l'aide de quelques forums et d'internet. J'ai appris les bases du C l'année dernière et là j'avais besoin des classes pour avoir un programme plus lisible donc je me suis dit que j'allais faire mon programme en C++ mais effectivement, je connais juste les bases de ce langage donc dès que ca foire je trouve pas les solutions (ca doit etre propre à tous les débutants ca)
sinon un debuggeur y en a bien un intégré à emacs mais je sais pas m'en servir donc...
enfin si t'as pas la solution à mon problème de segmentation fault je concois très bien que ca puisse t'emmerder d'aider quelqu'un qui n'y connait rien, mais si t'as la solution s'il te plait donne la, c'est un des seuls points qui pose problème à programmer et le reste je devrais y arriver.
Marsh Posté le 21-03-2004 à 17:08:11
ah oui j'avais oublié de remettre j à 0 au début de la boucle, c'est vraiment trop con comme erreur (et ca l'est encore plus de rester bloqué 45 min dessus)
merci pour les réponses que tu m'as apportées
Marsh Posté le 21-03-2004 à 17:11:10
(encore un exemple d'un débutant qui s'est lancé et qui est dans le mur depuis le départ)
Marsh Posté le 21-03-2004 à 17:20:41
ReplyMarsh Posté le 21-03-2004 à 18:23:28
heu je suis debutant en c++ aussi, mais si j'ai bien compris, les class c'est fait pour "remplacer" les structures non ?
donc library ce que tu devrais faire c'est:
Code :
|
taz, tu confirme ?
Marsh Posté le 21-03-2004 à 18:25:05
Fabien a écrit : heu je suis debutant en c++ aussi, mais si j'ai bien compris, les class c'est fait pour "remplacer" les structures non ?
|
tu n'as absolument rien compris. c'est pire, archi pire ... la notion de constructeur ça vous dit quelque chose ?
Marsh Posté le 21-03-2004 à 18:26:39
Taz a écrit : tu n'as absolument rien compris. c'est pire, archi pire ... la notion de constructeur ça vous dit quelque chose ? |
oui, et ?
Marsh Posté le 21-03-2004 à 18:27:07
xterminhate a écrit : ca va mal finir encore |
quand tu maitrises pas le sous ensemble qu'est le C au C++, c'est pas la peine d'aller plus loin
Marsh Posté le 21-03-2004 à 18:28:21
Taz a écrit : la preuve est faite que non |
ha j'avais pas vu qu'il voulais initialiser qqchose
Marsh Posté le 21-03-2004 à 18:29:01
il faut mettre dans le constructeur les allocations de pointeur, et dans le destructeur les desallocations corspondantes. Mais le mieux serait peut etre de virer tous les pointeurs...
Code :
|
Marsh Posté le 21-03-2004 à 18:30:06
xterminhate a écrit : il faut mettre dans le constructeur les allocations de pointeur, et dans le destructeur les desallocations corspondantes. Mais le mieux serait peut etre de virer tous les pointeurs...
|
et voilà, ça va encore segfaulter ...
Marsh Posté le 21-03-2004 à 18:33:56
xterminhate a écrit : c'est clair, mais faut bien les guider pas à pas ?! |
pas comme ça. il faut qu'il comprenne d'abord ce qui ce passe quand on manipule une struct C
Marsh Posté le 21-03-2004 à 18:36:01
C++ et STL fournissent suffisament d'argument pour éviter au maximum les pointeurs dans les class/struct. Remplacer les pointeurs permettrait de fiabiliser le code dans un premier temps.
Marsh Posté le 21-03-2004 à 21:36:46
Taz a écrit : les solutions je te les ai déjà données |
Taz t'es ptèt pas mauvais en C++ mais oublies pas que tu as été de leur niveau il n'y a pas forcément TROP longtemps... t'as aussi le droit de rester cordial sur le forum ou de t'abstenir de répondre.
Marsh Posté le 21-03-2004 à 21:39:08
peut être. je dis juste que passer au C++ alors qu'on ne sais pas allouer correctement une maitrise, c'est la preuve que ce n'était pas le moment de migrer. il y a tant de choses dans le C qui sont intéressantes et complexes à maitriser, sans qu'on ait besoin de se lancer dans le C++, qui repose sur de nombreux mécanismes basiques du C
Marsh Posté le 21-03-2004 à 21:44:50
Taz a écrit : peut être. je dis juste que passer au C++ alors qu'on ne sais pas allouer correctement une maitrise, c'est la preuve que ce n'était pas le moment de migrer. il y a tant de choses dans le C qui sont intéressantes et complexes à maitriser, sans qu'on ait besoin de se lancer dans le C++, qui repose sur de nombreux mécanismes basiques du C |
mais on fait pas toujours ce que l'on veut dans la vie, moi je suis obligé de faire un prog en c++, donc voila
Marsh Posté le 21-03-2004 à 21:48:34
tu ne m'a pas compris. le C peut être vu comme un sous ensemble du C++. pas la peine d'utiliser des concepts non maitrisés du C++ quand on a des lacunes en C. si tu commences à nous faire une struct avec une fonction membre init, pour ma part de préfère encore une fonction globale init et une approche classique à la C. donc encore une fois : pour bien comprendre le C++, il faut __d'abord__ s'assurer des bases correcte de ce sous ensemble qu'est le C, pour __ensuite__ étudier les apports du C++ notemment côté objet.
Marsh Posté le 21-03-2004 à 22:11:30
mais quand on a jamais étudié ces langages avec quelqu'un qui s'y connait et qui peut donner des conseils, faire éviter les erreurs connes, quelqu'un qui trouve un moyen pour expliquer simplement les choses, on fait comment ?
Est ce que tu as appris ces langages tout seul en quelques heures ? Sincèrement je ne pense pas, et meme si tu es juste arrivé à ce niveau de maitrise sans aide extérieure je te félicite vraiment.
Mais je n'ai pas eu assez de cours en info (et surtout les cours étaient à un niveau très faible. C'est pour dire, je suis dans les meilleurs de la promo en programmation) et je suis meme pas sur que les profs d'info qu'on a connaissent assez les subtilités du C et C++ pour les expliquer voire pourl es comprendre.
En bref, je n'ai pas eu de formation sérieuse dans ces langages, et je dirais meme que ce n'est pas ma vocation. Je programme de temps en temps mais je ne suis pas expert dans le domaine.
Marsh Posté le 21-03-2004 à 22:28:35
moi quand je veux apprendre quelques choses, je fais chapitre par chapitre, je m'amuse pas à lire les derniers chapitres alors que j'ai pas terminée la première partie. tu ne devrais pas être confronter à ce genre d'erreur à ce niveau, c'est la preuve de lacunes et d'imcompréhension de la couche objet. c'est tout ce que j'ai a dire.
Marsh Posté le 21-03-2004 à 22:48:48
je suis d'accord que la méthode la plus efficace pour apprendre c'est de prendre un bouquin et de lire tous les chapitres.
Mais dans mon cas c'est différent : je programme occasionnellement et je connais juste les bases. Je pense connaitre assez les bases pour ne pas être bloqué à chaque ligne et comme je programme rarement, je prefere me lancer directement dans le programme que j'ai à faire. Bien sûr, je suis obligé de demander de l'aide pour les passages un peu complexe, mais comme j'écris environ un programme par an je ne veux pas investir trop de temps dans l'apprentissage de quelque chose que j'aurai de toutes facons oublié pour mon prochain programme.
Mon but n'est pas de connaitre à fond le langage pour pouvoir développer facilement tous mes programmes, mon but est de connaitre assez le langage pour ne pas être trop bloqué lorsque j'écris mon programme annuel.
Marsh Posté le 21-03-2004 à 22:57:34
Taz a écrit : ben prends un langage plus simple alors |
lol
en fait j'avais deja fait ce programme l'année dernière, en C, et c'etait un bordel immonde avec tous les indices des tableaux (faut dire que les tableaux tridimensionnels ca aide pas)
la pour un autre projet je me suis dit que j'allais reprendre la meme idée, mais l'ancien programme était tellement merdique que c'etait impossible de le reprendre, et je me suis dit que pour faire un code plus lisible il faudrait que j'utilise des objets, d'où le C++.
voila mes motivations
Marsh Posté le 21-03-2004 à 23:00:35
Limit a écrit : Fais à l'ancienne en php |
ah oui c'est vrai, j'ai meme fait le programme en php mais c'etait tellement lent que j'ai du apprendre le C pour faire mon programme
Marsh Posté le 21-03-2004 à 23:01:27
enfin faire des calculs de réseaux neuronaux le php était pas tellement adapté
Marsh Posté le 21-03-2004 à 23:02:20
Library a écrit : |
le fait est que tu ne le fais pas
Marsh Posté le 21-03-2004 à 15:39:54
j'ai (à nouveau) un petit probleme
sauf que cette fois-ci, mon probleme vient d'un new.
Je veux créer un tableau à deux dimensions et la, quelque chose de bizzare se passe :
lorsque j'écris
cela compile bien.
Par contre, je veux faire maintenant la meme chose sauf que
- ce sont des float et pas des entiers (ca ca pose pas de probleme)
- le "a" est déclaré dans une structure
j'écris donc
L'erreur qu'il renvoie est :
g++ -c fonctions.cc -o fonctions.o
fonctions.cc: In function `configuration init_conf()':
fonctions.cc:101: `donnees' undeclared (first use this function)
fonctions.cc:101: (Each undeclared identifier is reported only once for each function it appears in.)
make: *** [fonctions.o] Erreur 1
Pourtant, il connait bien config.donnees, j'ai vérifié.
A la place de la ligne config.*donnees=new float [nb_series]; j'ai essayé aussi *config.donnees=new float [nb_series]; et la mise en commentaire de cette ligne. A chaque fois ca compile mais ca renvoie une segmentation fault à l'execution du programme.
Vous savez ce qui peut merder ?
aidez moi je suis un peu desesperé