Erreur de pointeur ? Je ne la trouve pas !

Dominick_167 Messages postés 9 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 10 avril 2011 - 28 févr. 2011 à 01:02
Dominick_167 Messages postés 9 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 10 avril 2011 - 1 mars 2011 à 15:45
Bonjour,
Voici mon problème... le programme me fait une erreur de pointeur juste au moment où je veux afficher les valeurs du tableau... j'ai pensé de mettre sur paste bin pour ne pas polluer cette page !

matrices.h - matrices.cpp

Svp, vous seriez gentils de m'éclairer !

13 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
28 févr. 2011 à 12:47
pastebin => Merci ! Ça fait plaisir, ce n'est pas souvent sur ce site que je vois ce genre de réflexe.

* Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
* Évite les system (pas portable)
* Utilise un main standard (int argc, char* argv[]) et non _TCHAR.
* Ensuite, active les warnings, tu en as énormément !

Je pense que ton erreur vient du fait que tu retournes une référence sur une variable locale (vouée à disparaitre). Ex: ligne 63.
Retire les références.

ex:
matrice & operator +(matrice&); => matrice operator +(matrice&);


Je te copies ce que j'ai quand je compile sous g++:


mat.cc: In function ‘std::ostream& operator<<(std::ostream&, matrice&)’:
mat.cc:14:11: warning: unused variable ‘a’
mat.cc: In constructor ‘matrice::matrice(unsigned int, unsigned int)’:
mat.cc:26:14: warning: comparison of unsigned expression >= 0 is always true
mat.cc:27:16: warning: comparison of unsigned expression >= 0 is always true
mat.cc: In constructor ‘matrice::matrice(int**, unsigned int, unsigned int)’:
mat.cc:37:14: warning: comparison of unsigned expression >= 0 is always true
mat.cc:38:16: warning: comparison of unsigned expression >= 0 is always true
mat.cc: In member function ‘matrice& matrice::operator+(matrice&)’:
mat.cc:63:17: warning: reference to local variable ‘add’ returned
mat.cc: In member function ‘matrice& matrice::operator-(matrice&)’:
mat.cc:77:19: warning: reference to local variable ‘sous2’ returned
mat.cc: In member function ‘matrice& matrice::operator*(int)’:
mat.cc:87:16: warning: reference to local variable ‘mult’ returned
mat.cc: In member function ‘matrice& matrice::operator*(matrice&)’:
mat.cc:97:19: warning: reference to local variable ‘mult2’ returned
mat.cc: In member function ‘matrice& matrice::revenus(matrice&)’:
mat.cc:106:15: warning: reference to local variable ‘newr’ returned
mat.cc: At global scope:
mat.cc:115:22: error: ‘_TCHAR’ has not been declared
mat.cc: In function ‘int _tmain(int, int**)’:
mat.cc:193:17: error: ‘system’ was not declared in this scope
mat.cc: At global scope:
mat.cc:115:5: warning: unused parameter ‘argc’
mat.cc:115:5: warning: unused parameter ‘argv’
mat.cc: In member function ‘matrice& matrice::operator*(matrice&)’:
mat.cc:104:1: warning: control reaches end of non-void function
mat.cc: In member function ‘matrice& matrice::operator-(matrice&)’:
mat.cc:85:1: warning: control reaches end of non-void function
mat.cc: In member function ‘matrice& matrice::operator+(matrice&)’:
mat.cc:71:1: warning: control reaches end of non-void function


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
Dominick_167 Messages postés 9 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 10 avril 2011
28 févr. 2011 à 14:25
Corrections faite, mais ne fonctionne pas toujours ! Bug dans la nouvelle fonction ostream...

j'ai gardé le namespace et system, ce n'est que dans le cadre d'un cours d'informatique, on ne compile pas de version portable ! Pour les warnings, je ne sais pas comment les voir une fois l'application démarré sous Microsoft Visual C++ Pro 2010

matrices.cpp - matrices.h

Merci beaucoup
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
28 févr. 2011 à 15:11
namespace => N'est pas lié à la portabilité, c'est juste ultra moche, et source de problème.
system => C'est compréhensible.
Regarde la doc de Visual Studio. Malheureusement, je ne connais pas bien Visual.

Je manque de temps. Si ce n'est pas pressé, j'essaie d'y jetter un coup d'oeil ce soir.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
Dominick_167 Messages postés 9 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 10 avril 2011
28 févr. 2011 à 16:42
namespace est ce qu'il nous a été montré dans mon cours d'informatique, probablement pour débuter dans le c++ et nous simplifier la vie, mais là j'ai un problème de pointeur lorsque je veux afficher la matrice !

system, je ne connais pas d'alternative à cette fonction et permet l'arrêt du programme pour ne pas qu'il ferme une fois qu'il à terminé les manipulation...

J'aurais peut-être quelques points de retard sur le devoir, mais au moins, ça ne sera pas un 0.

J'ai essayé plusieurs solutions mais je n'ai toujours pas trouvé d'où viens mon erreur ! Si ça serait au constructeur défaut, je ne pourrais pas procéder à la multiplication, peut-être serait-il une erreur dans le return de la valeur dans la surcharge de l'opération * quand les deux opérandes sont des EnormeEntier ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
28 févr. 2011 à 17:28
Je manque vraiment de temps. Mais j'essaie de jeter un coup d'oeil ce soir. Ton échéance est pour quand ?

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
Dominick_167 Messages postés 9 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 10 avril 2011
28 févr. 2011 à 18:11
Il n'y a pas vraiment d'échéance, le professeur sais que j'ai un problème et que j'essaie de le résoudre, vérifis quand tu auras le temps !
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
28 févr. 2011 à 20:04
Je t'ai fait une update sur pastebin qui résoud une partie de tes problèmes.

En effet, tu as oublié de recoder l'operateur d'assignation ("operator=()"). Et donc, quand tu fais un c = w+c par exemple, tu fais une copie standard de matrice, ce qui est certes valables pour des entiers mais pas pour des int**.
Je t'ai donc ajouté cet opérateur. Il reste encore des problèmes, mais je manque toujours de temps. Je ne m'y pencherais plus avant demain. Donc essaie d'avancer tout seul.
Je t'ai aussi corrigé tout tes warning.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
28 févr. 2011 à 20:04
Avec les liens c'est mieux...

http://pastebin.com/aEedMR6E
http://pastebin.com/k16Xy8kE
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
Dominick_167 Messages postés 9 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 10 avril 2011
28 févr. 2011 à 20:18
En regardant avec mon prof, j'ai détecté l'erreur que tu as mentionné et j'ai corrigé une logique de mal faite dans les constructeurs... Le programme avance bien, sauf une parti (fn membre revenus) qui plante dû à une erreur de pointeur...
0
Dominick_167 Messages postés 9 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 10 avril 2011
28 févr. 2011 à 20:22
Ok ! résolu... ne reste que le destructeur qui plante
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
1 mars 2011 à 06:01
Salut,
dans matrice::matrice(unsigned l, unsigned c) il faut boucler sur lignes/colonnes et pas sur l/c.
dans le cas ou l=0 la matrice n'est pas correctement allouée.
0
Dominick_167 Messages postés 9 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 10 avril 2011
1 mars 2011 à 14:36
Oui, cette erreur avait été corrigé dans l'inspection profonde que j'ai fait hier...
0
Dominick_167 Messages postés 9 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 10 avril 2011
1 mars 2011 à 15:45
Les erreur dans mes algorithmes de calculs ont été corrigés

Matrice.cpp
Matrice.h
0
Rejoignez-nous