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

  FORUM HardWare.fr
  Programmation
  C++

  probleme con avec new

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

probleme con avec new

n°679283
Library
Posté le 21-03-2004 à 15:39:54  profilanswer
 

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  

Code :
  1. int ** a;
  2.   *a=new int[3];
  3.   for (int i=0;i<3;i++)
  4.     a[i]=new int [4];


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

Code :
  1. config.*donnees=new float [nb_series];
  2.   for (int i=0;i<nb_series;i++)
  3.     config.donnees[i]=new float[nb_exemples];
  4.   int i=0;
  5.   int j=0;
  6.   while(std::getline(fichier, ligne))
  7.     {
  8.       std::istringstream flig(ligne);
  9.       while (flig >> x)
  10.         {
  11.           config.donnees[i][j]=x;
  12.           j++;
  13.         }
  14.       i++;
  15.     }


 
L'erreur qu'il renvoie est :

Citation :


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é :D

mood
Publicité
Posté le 21-03-2004 à 15:39:54  profilanswer
 

n°679286
verdoux
And I'm still waiting
Posté le 21-03-2004 à 15:44:20  profilanswer
 

Library a écrit :

cela compile bien.


Ouais, ça compile.
Mais c'est tout.
 
Et puis *(config.donnees)


Message édité par verdoux le 21-03-2004 à 15:44:33
n°679291
Library
Posté le 21-03-2004 à 15:53:44  profilanswer
 

verdoux a écrit :


Ouais, ça compile.
Mais c'est tout.
 
Et puis *(config.donnees)


 
*(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++ ?

n°679295
Taz
bisounours-codeur
Posté le 21-03-2004 à 16:10:01  profilanswer
 

int ** a;
    *a=new int[3];  
 
tu le sens pas bizarre le *a là ?

n°679302
Library
Posté le 21-03-2004 à 16:15:50  profilanswer
 

c'est vrai que ca fait un peu bizzare
mais vu que ca compilait j'étais content :D
 
pour l'instant à l'aide de ce que j'ai trouvé sur internet j'en suis à :

Code :
  1. config.donnees=new float * [nb_series];
  2.   for (int k=0;k<nb_series;k++)
  3.     {
  4.       config.donnees[k]=new float [nb_exemples];
  5.     }


 
mais y a toujours une segmentation fault :(

n°679304
Taz
bisounours-codeur
Posté le 21-03-2004 à 16:18:48  profilanswer
 

ben tu foires ailleurs qu'est-ce qu'on y peut ...
 
t'es sur que ton j dépasse pas nb_exemples-1 ?

n°679306
Library
Posté le 21-03-2004 à 16:31:00  profilanswer
 

ca foire ailleurs que lorsque je rentre les données apparamment
à la fin j'ai mis  

Code :
  1. std::cout << "ok3";
  2.   fichier.close();
  3.   std::cout << "ok2";
  4.   std::cout << config.donnees[0][0] << std::endl;
  5.   std::cout << "ok";
  6.   return config;


 
à ce moment ca m'affiche "ok3ok20.0193785
Segmentation fault"
 
mais si je mets

Code :
  1. std::cout << "ok3";
  2.   fichier.close();
  3.   std::cout << "ok2";
  4.   //std::cout << config.donnees[0][0] << std::endl;
  5.   std::cout << "ok";
  6.   return config;


 
ca affiche juste "segmentation fault"
bizzare bizzare...

n°679308
Taz
bisounours-codeur
Posté le 21-03-2004 à 16:32:47  profilanswer
 

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

n°679310
Library
Posté le 21-03-2004 à 16:37:41  profilanswer
 

avec le std::flush ca m'affiche bien ok3ok2ok avant de faire la segmentation fault
le prototype et la définition sont la :

Code :
  1. struct configuration
  2. {
  3.   int nbcouches;
  4.   int *dim;
  5.   int *couche;
  6.   int * fonction;
  7.   float eta;
  8.   float ** donnees;
  9. };
  10. configuration init_conf ();

n°679313
Taz
bisounours-codeur
Posté le 21-03-2004 à 16:40:13  profilanswer
 

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


Message édité par Taz le 21-03-2004 à 16:40:18
mood
Publicité
Posté le 21-03-2004 à 16:40:13  profilanswer
 

n°679319
Library
Posté le 21-03-2004 à 17:00:21  profilanswer
 

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.

n°679320
Taz
bisounours-codeur
Posté le 21-03-2004 à 17:02:27  profilanswer
 

les solutions je te les ai déjà données

n°679321
Library
Posté le 21-03-2004 à 17:08:11  profilanswer
 

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 :)

n°679322
Taz
bisounours-codeur
Posté le 21-03-2004 à 17:11:10  profilanswer
 

(encore un exemple d'un débutant qui s'est lancé et qui est dans le mur depuis le départ)

n°679328
Taz
bisounours-codeur
Posté le 21-03-2004 à 17:20:41  profilanswer
 

Taz a écrit :


t'es sur que ton j dépasse pas nb_exemples-1 ?

moi je parle dans le vide sinon

n°679364
fabien
Vive la super 5 !
Posté le 21-03-2004 à 18:23:28  profilanswer
 

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 :
  1. class configuration
  2.   {
  3.       public:
  4.       init_conf();
  5.       private:
  6.       int nbcouches;
  7.       int *dim;
  8.       int *couche;
  9.       int * fonction;
  10.       float eta;
  11.       float ** donnees;
  12.   };


 
taz, tu confirme ?
 


---------------
Découvre le HFRcoin ✈ - smilies
n°679365
Taz
bisounours-codeur
Posté le 21-03-2004 à 18:25:05  profilanswer
 

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 ?
 
donc library ce que tu devrais faire c'est:
 

Code :
  1. class configuration
  2.   {
  3.       public:
  4.       init_conf();
  5.       private:
  6.       int nbcouches;
  7.       int *dim;
  8.       int *couche;
  9.       int * fonction;
  10.       float eta;
  11.       float ** donnees;
  12.   };


 
taz, tu confirme ?
 
 

tu n'as absolument rien compris. c'est pire, archi pire ... la notion de constructeur ça vous dit quelque chose ?

n°679366
xterminhat​e
Si vis pacem, para bellum.
Posté le 21-03-2004 à 18:26:04  profilanswer
 

ca va mal finir encore :)

n°679367
fabien
Vive la super 5 !
Posté le 21-03-2004 à 18:26:39  profilanswer
 

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 ?


---------------
Découvre le HFRcoin ✈ - smilies
n°679369
Taz
bisounours-codeur
Posté le 21-03-2004 à 18:27:07  profilanswer
 

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

n°679370
Taz
bisounours-codeur
Posté le 21-03-2004 à 18:27:25  profilanswer
 

Fabien a écrit :

oui, et ?
 

la preuve est faite que non

n°679371
fabien
Vive la super 5 !
Posté le 21-03-2004 à 18:28:21  profilanswer
 

Taz a écrit :

la preuve est faite que non

ha j'avais pas vu qu'il voulais initialiser qqchose [:dawa]


---------------
Découvre le HFRcoin ✈ - smilies
n°679372
xterminhat​e
Si vis pacem, para bellum.
Posté le 21-03-2004 à 18:29:01  profilanswer
 

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 :
  1. struct configuration
  2. {
  3. configuration(); // construct
  4. ~configuration(); // destruct
  5. int nbcouches;
  6. int *dim;
  7. int *couche;
  8. int * fonction;
  9. float eta;
  10. float ** donnees;
  11. };

n°679373
Taz
bisounours-codeur
Posté le 21-03-2004 à 18:30:06  profilanswer
 

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

Code :
  1. struct configuration
  2. {
  3. configuration(); // construct
  4. ~configuration(); // destruct
  5. int nbcouches;
  6. int *dim;
  7. int *couche;
  8. int * fonction;
  9. float eta;
  10. float ** donnees;
  11. };



et voilà, ça va encore segfaulter ...

n°679374
xterminhat​e
Si vis pacem, para bellum.
Posté le 21-03-2004 à 18:31:29  profilanswer
 

c'est clair, mais faut bien les guider pas à pas ?!

n°679375
Taz
bisounours-codeur
Posté le 21-03-2004 à 18:33:56  profilanswer
 

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

n°679376
xterminhat​e
Si vis pacem, para bellum.
Posté le 21-03-2004 à 18:36:01  profilanswer
 

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.

n°679477
Kyle_Katar​n
Posté le 21-03-2004 à 21:36:46  profilanswer
 

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.

n°679479
Taz
bisounours-codeur
Posté le 21-03-2004 à 21:39:08  profilanswer
 

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

n°679481
fabien
Vive la super 5 !
Posté le 21-03-2004 à 21:44:50  profilanswer
 

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 [:spamafote]


---------------
Découvre le HFRcoin ✈ - smilies
n°679483
Taz
bisounours-codeur
Posté le 21-03-2004 à 21:48:34  profilanswer
 

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.

n°679491
Library
Posté le 21-03-2004 à 22:11:30  profilanswer
 

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.

n°679492
Taz
bisounours-codeur
Posté le 21-03-2004 à 22:28:35  profilanswer
 

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.

n°679504
Library
Posté le 21-03-2004 à 22:48:48  profilanswer
 

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.

n°679507
Taz
bisounours-codeur
Posté le 21-03-2004 à 22:52:39  profilanswer
 

ben prends un langage plus simple alors :o

n°679511
Library
Posté le 21-03-2004 à 22:57:34  profilanswer
 

Taz a écrit :

ben prends un langage plus simple alors :o


 
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 ;)

n°679512
Limit
Posté le 21-03-2004 à 22:59:06  profilanswer
 

Fais à l'ancienne en php [:xfred4]  
 
 
 ;)

n°679514
Library
Posté le 21-03-2004 à 23:00:35  profilanswer
 

Limit a écrit :

Fais à l'ancienne en php [:xfred4]  
 
 
 ;)  


 
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 :D

n°679515
Limit
Posté le 21-03-2004 à 23:01:27  profilanswer
 

enfin faire des calculs de réseaux neuronaux le php était pas tellement adapté :D

n°679517
Taz
bisounours-codeur
Posté le 21-03-2004 à 23:02:20  profilanswer
 

Library a écrit :


reprendre, et je me suis dit que pour faire un code plus lisible il faudrait que j'utilise des objets, d'où le C++.

le fait est que tu ne le fais pas

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  probleme con avec new

 

Sujets relatifs
[C++] problème avec une spécialisation de classeProblème de linkage avec dev cpp
problème avec synchronizedprobleme de creation de table associatif sous ms sql sever
Probleme Formulaire a envoyer par mailprobleme avec while ...
Probleme ! C insideProbleme de new, tableau, * , ou & ?
Probleme à l'affichage d'une requeteProbleme de table sous Power AMC! Help
Plus de sujets relatifs à : probleme con avec new


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