pb àl'execution car prog trop gros pour DEV-CPP

pb àl'execution car prog trop gros pour DEV-CPP - C++ - Programmation

Marsh Posté le 27-01-2005 à 00:05:42    

Bonjour,
Hier, j'ai lancé un prog qui plantait lors de l'exécution à l'instruction "push_back".En copiant le contenu d'une de mes sources .cpp dans une autre, j'ai gagné un peu de place et à partir de là,l'instruction "push_back" est passé comme une lettre à la poste.
 
Aujourd'hui, jai dû augmenter la taille de mon prog en ajoutant des lignes de codes et ça replante à nouveau,au même endroit.
Je crois que j'ai en fait un problème de place sous dev-c++ et que j'ai atteint les limites de dev-cpp.
Comment puis-je donc faire et est-ce que ça vient bien de là?
Merci et bonne journée


Message édité par smag le 27-01-2005 à 00:15:56
Reply

Marsh Posté le 27-01-2005 à 00:05:42   

Reply

Marsh Posté le 31-01-2005 à 16:12:19    

euh devcpp ou pas, GCC c'est quand même un vrai compilateur qui fonctionne à peu pres, moi je douterai plutôt du programmeur, t'es sûr que t'aurais pas écris un truc ou 2 pas trop dans les normes ?
Et c'est quoi planter ? Il compile correctement (pas de warning, et tu es sûr de ton code), mais plante à l'éxécution ?
Tu compiles en debug, release ? Tu fais une vraie éxécution ou un débuggage (le debuggeur de devcpp est assez pourri lui)
Tu as essayé avec un autre compilo (gratuitement, au moins pour test, en téléchargeant CodeWarrior ou BorlandC++) ?


Message édité par TotalRecall le 31-01-2005 à 16:12:51

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 31-01-2005 à 16:13:36    

(ou vc++.net qui est gratos)


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 31-01-2005 à 16:50:50    

"ça plante" certes, mais plus exactement c'est quoi (et où) l'erreur ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 31-01-2005 à 18:02:41    

Dans la version 5 de dev-cpp ça plante pas mais le debugger est pourri.
Dans la version 4 de dev-cpp ça plante à l'instruction push_back en me faisant une segmentation default et le debugger que j'utilise alors c visual insight debugger avec une interface pas trop mal.
est-il possible d'utiliser un autre debugger plus complet et performant sous dev-cpp?
 
Merci pour votr aide

Reply

Marsh Posté le 31-01-2005 à 18:04:22    

Citation :

segmentation default


mais c'est Devcpp qui plante ou ton appli a l'exécution ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 31-01-2005 à 18:07:56    

c'est quoi ces conneries de programme trop gros ?

Reply

Marsh Posté le 31-01-2005 à 18:13:00    

TotalRecall a écrit :

(ou vc++.net qui est gratos)


 
Mais dans la version de démonstration il n'y a pas d'interface graphiqu e pour le debugger si je ne me trompe?

Reply

Marsh Posté le 31-01-2005 à 18:14:09    

Quand je passe sous le debugger il me dit segmentation default et quand je le lance direct j'ai la fenêtre dev-cpp va fermer car il se plante

Reply

Marsh Posté le 31-01-2005 à 18:14:28    

t'as pas l'impression d'avoir le syndrôme du débutant: c'est pas moi c'est compilateur ?

Reply

Marsh Posté le 31-01-2005 à 18:14:28   

Reply

Marsh Posté le 31-01-2005 à 18:29:43    

Si je pensais que ça venait du compilo, j'aurai pas laissé de message et vu que pour l'instant j'arrive à le lancer sous la version 5, je ne serais pas en train d 'essayer de comprendre d'où vient l'erreur, que cela vienne de moi ou d'un espace sur la pile.
Voilà monsieur.
P'être bien que je vais finir par trouver l'erreur moi même car mon prog ne me donne pas les résultats escomptés...

Reply

Marsh Posté le 31-01-2005 à 18:35:52    

le problème c'est ton code. Balance

Reply

Marsh Posté le 31-01-2005 à 18:56:03    

ça plante à chaque instruction push_back où quelle soit.

Reply

Marsh Posté le 31-01-2005 à 19:00:50    

Code :
  1. #include <vector>
  2. int main()
  3. {
  4.   std::vector<int> vi;
  5.   vi.push_back(3);
  6. }


 
ça plante ?

Reply

Marsh Posté le 01-02-2005 à 00:21:22    

J'crois avoir ciblé beaucoup mieux le pb:
 
J'ai pris un prog qui marche ( qui au début me plantait sur push_back) mais qui ensuite suite à différentes manip ne plantait plus jamais.
 
 
j'execute donc le code sans pb, dépassant largement l'instruction push_back mais m'apperçoit que j'ai fait une faute de frappe.
Je modifie mon source, je recompile et là bing, et là ça se plante sur push_back.
Je reviens en arrière, cad que je remets '=' , je recompile et là ça plante sur push_back alors que cinq minutes auparavant ça marchait nickel et ça fait des jours que ça passait comme ça.
 
Il est à noter que push_back fait une insertion dans la mémoire heap donc j'ai peut être un pb de place!!!!
 

Reply

Marsh Posté le 01-02-2005 à 00:22:33    

rien à voir. T'as tout simplement corrompu ta pile, et en fonction de ce que tu fais et de ton code, ça fout en l'air ton programme à tel ou tel endroit.

Reply

Marsh Posté le 01-02-2005 à 00:40:38    

Taz a écrit :

rien à voir. T'as tout simplement corrompu ta pile, et en fonction de ce que tu fais et de ton code, ça fout en l'air ton programme à tel ou tel endroit.


 
Non non non c pas possible ce que tu dis car je fais exactement le même code que y'a cinq minutes, en passant au même endroit les variables sont alimentées dans le même ordre de la même façon et là ça ne passe plus!!!  

Reply

Marsh Posté le 01-02-2005 à 01:09:24    

si tu le dis. T'as l'air d'avoir beaucoup de certitude pour quelqu'un qui s'acharne irrationnellement sur vector<>::push_back qui est sans doute LA fonction membre la plus utilisée de STL.

Reply

Marsh Posté le 01-02-2005 à 09:41:36    

Mais si j'ai corrompu ma pile, je fais comment alors?

Reply

Marsh Posté le 01-02-2005 à 09:42:53    

smag a écrit :

Mais si j'ai corrompu ma pile, je fais comment alors?


Tu commences par débugger le code existant avant de continuer?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 01-02-2005 à 09:49:45    

Recherche les endroits où tu utilises des pointeurs...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 01-02-2005 à 09:52:09    

Je comprends rien.Comme tu l'as dit je suis débutante.
Je sais où j'ai des pointers.Peut être est-ce en arrêtant brutalement le prog que y'en a un qu'à pas été détruit comme il fautr et que j'ai des fuites de mémoire? mais comment je fais concrètement pour que ça remarche à nouveau?
 
Ps:
j'ai pris le même source sous dev-cpp VERSION 5 et il passe sans pb...
alors qu'il plante toujours sous DEV-C4

Reply

Marsh Posté le 01-02-2005 à 10:27:11    

ton source pliz.

Reply

Marsh Posté le 01-02-2005 à 12:09:02    

Le probleme avec la corruption mémoire c'est que ca fait planter ailleurs qu'à l'endroit de la corruption. Analyse bien l'utilisation des pointeurs...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 01-02-2005 à 12:15:35    

bjone a écrit :

ton source pliz.


mon source il est super long  alors commment je fait?
et les pointeurs sont nikel  
et le prog ne plante pas du tout sous dev-cpp version 5
 
Sous microsoft visual basic y'a possiblité de modifier la taille de la pile.
Sus dev-c++ version 4, la pile par dfautl doit être trop petite

Reply

Marsh Posté le 01-02-2005 à 12:18:17    

c'est ton programme qui est buggé, tu peux le compilé avec ce que tu veux, il plantera tôt ou tard. Arrête de chercher de ce côté là. Vérifie tes pointeurs, compile avec le niveau maximal de warning.

Reply

Marsh Posté le 01-02-2005 à 13:14:54    

Je dirais plutot que tu as la chance que ça plante sous devcpp 4. Essaye de trouver où et de réduire petit à petit ton programme jusqu'à avoir un petit exemple qui plante.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 01-02-2005 à 13:46:14    

Laissez tomber je crois que vous n'avez pas bien saisi.
D'autre part dans une autre forum, on m'a assuré qu'il s'agissait d'un pb de pile.
En effet, le programme passe sans pb un nb incalculable de fois sous n'importe quel autre compilateur. ( Le code est issu d'un bouquin)
 
Seule la version 4 de dev-cpp n'arrive pas à le gérer et le fait planter lors du premier accès à la mémoire heap quel qu'il soit ( aie essayé différents chemins)
 
Donc je vais continuer à bosser sur la version 5 puisque là pas de pb du tout
Merci à tous et bonne journée
 

Reply

Marsh Posté le 01-02-2005 à 15:37:47    

Moui san doute. Sache quand même que heap c'est le tas, c'est indépendant de la pile (stack) qui sert à autre chose.
Y'a 2 possibilités pour résoudre un problème de dépassement de mémoire : repousser la limite en donnant plus de mémoire, ou résoudre le problème.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 01-02-2005 à 17:22:26    

ok merci mais comment repousser les limites?

Reply

Marsh Posté le 01-02-2005 à 17:41:00    

:lol: désolé.
 
je crois que HelloWorld voulais que tu sélectionnes "ou résoudre le problème" dans son post.

Reply

Marsh Posté le 01-02-2005 à 19:26:31    

smag a écrit :

ok merci mais comment repousser les limites?


vas voir sur tes copains sur ton autre forum pour ton problème. Nous ont te dit que tu corromps ta pile. Y a pas de limite à repousser : tu corromps ta pile .|

Reply

Marsh Posté le 02-02-2005 à 01:35:50    

On va essayer une autre image...
"Je comprends pas je tombe souvent en panne d'essence"
"ah oui c'est parce qu'il y a une fuite dans votre réservoir"
"que faire ?"
"2 solutions : colmater la fuite ou faire le plein plus souvent"
"super, merci! je vais de suite faire le plein"


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 02-02-2005 à 08:15:51    

j'ai eu un aperçu du code:
- c'est pas compilé en -Wall
- y a des pointeurs dans des tas de classes : pas d'operator= ni de constructeur de recopie. Les pointeurs ne sont pas initialisés dans les constructeurs, où quand il le sont, c'est  conditionnellement

Reply

Marsh Posté le 02-02-2005 à 14:41:49    

HelloWorld a écrit :

On va essayer une autre image...
"Je comprends pas je tombe souvent en panne d'essence"
"ah oui c'est parce qu'il y a une fuite dans votre réservoir"
"que faire ?"
"2 solutions : colmater la fuite ou faire le plein plus souvent"
"super, merci! je vais de suite faire le plein"


Merci j'avais compris au prime abord.C'est pas parce que je débute en c++ qu j'comprends pas les "subtilités" de la langue française!!
 
Juste que j'arrive à identifier le pb alors voilà quoi!!

Reply

Marsh Posté le 02-02-2005 à 14:44:32    

Taz a écrit :

j'ai eu un aperçu du code:
- c'est pas compilé en -Wall
- y a des pointeurs dans des tas de classes : pas d'operator= ni de constructeur de recopie. Les pointeurs ne sont pas initialisés dans les constructeurs, où quand il le sont, c'est  conditionnellement


 
En mode debuggage, j'ai suivi le prog pas à pas et tous le spointerus sont initailisés à zéro.Des fiis je me demander comment il est vrai, mais c le cas.
 
Pour le reste du message j'ai pas tout compris.COmpilé en -wall cad?
pas d'operatuer = ni de constructeur de recopie???

Reply

Marsh Posté le 02-02-2005 à 14:54:29    

arf pour tes pointeurs, si tu n'as rien mis dans ton constructeur (mise à NULL/0 explicite), si ça passe en debug c'est le hasard (c'est pas dis que ça passe en release).
 
pour l'opérateur = et le constructeur de recopie, as-tu eu des cours de C++ ?
 

Reply

Marsh Posté le 02-02-2005 à 15:15:02    

bjone a écrit :

arf pour tes pointeurs, si tu n'as rien mis dans ton constructeur (mise à NULL/0 explicite), si ça passe en debug c'est le hasard (c'est pas dis que ça passe en release).
 
pour l'opérateur = et le constructeur de recopie, as-tu eu des cours de C++ ?


 
en fait j'ai du lire un peu vite le code car ça passe en release.
Effectivent, j'apprnds le c++ par ce bouquin et donc si je ne me trompe l'opératur égal doit être déclaré dans une méthode membre ou bien sa déclaration fait partie de la STL ou bien je raconte n'importe quoi.
Le constructeur de  copie je connais mais pas de recopie...

Reply

Marsh Posté le 02-02-2005 à 15:48:58    

Et puis c facile de critiquer le code écrit par les autres!!!
On a chacun sa manière de coder et en l'occurence ce code est issu d'un bouquins qui a été conseillé par ce site pour se familisariser avec les premières bases du C++.
Certes, je conviens qu'il n'est certainement pas parfait, mais grâce à ce bouquin j'ai pu me lancer dans la découverte d'un nouveau langage en y prenant du plaisir et en ayant envie d'en apprendre un plus.
 
Au départ, avant de connaître la mutiplication, on faisait 2+2+2 au lieu de faire 3*2...chaque chose en son temps!!!
 
Ainsi, au lieu de dire que c codé de n'importe quelle façon, ce qui n'avance pas à grand chose de dire ça,vous n'avez qu'à me donner des explications beaucoup détaillées et simples à comprendre et si vous n'en avez le courage ( à moins que ce soit un manque de capacité?), veuillez gardez vos commentaires pour vous.
 
 
Je remercie cependant les rares qui ont bien voulu m'accorder un peu de leur temps et de leur savoir pour me faire avancer...

Reply

Marsh Posté le 02-02-2005 à 16:43:04    

oki, c'est pas ça mais:
1) si tu as des pointeurs dans ta classe
2) et que dans le destructeur tu détruits des objets pointés par les pointeurs membres
3) et que tu n'as pas implémenté l' operator = et le constructeur de recopie
 
=> tu crasheras probablement lors d'un push_back() ou autre opération sur un container de la STL.


Message édité par bjone le 02-02-2005 à 16:44:39
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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