Probleme de free sur une structure - C - Programmation
Marsh Posté le 18-04-2006 à 14:12:15
Makapouf a écrit : hors je n'arrive pas a libérer la mémoire de cette structure codé comme ceci: |
|
Merci de poster du code qui compile...
Marsh Posté le 18-04-2006 à 14:20:27
OK, mais ça va faire beaucoup de code.
je met directement le lien des fichier h et c car sinon ça va devenir imcompréhensible:
http://makapouf.free.fr/SP.c
http://makapouf.free.fr/SP.h
http://makapouf.free.fr/Sac.c
http://makapouf.free.fr/Sac.h
http://makapouf.free.fr/file.c
http://makapouf.free.fr/file.h
http://makapouf.free.fr/test.c
le test contien le main
Merci a ceux qui aurons le courage de lire ça, surtout qe j'ai du faire des erreurs grossiere, mais faut pas trop m'en vouloir je débute
Marsh Posté le 18-04-2006 à 15:08:16
Makapouf a écrit : OK, mais ça va faire beaucoup de code. |
Apprendre à réduire au strict minimum compilabkle montrant le problème fait artie du métier. Mais là, effectivement, il s'agit peut être d'un problème d'intégration... Ceci dit, est-ce que chaque objet a été testé individuellement ?
Je travaille sur des projets de 100 000 à 10 000 000 de lignes. Crois-tu qu'on teste tout d'un coup ? Non. Le code est un assemblage de modules parfaitement autonomes et sévèrement testés individuellements (Tests Unitaires).
Quand il y a un bug quelque part, on sait déjà que ça ne peut pas venir du code validé. On s'appuye sur du solide. Si les fondations et les briques sont fragile, l'ensemble s'effondre. C'est logique...
Apprendre à gérer de gros projets, ça fait aussi partie du métier...
A vue de nez, les modules SP, Sac et file devraient faire l'objet de testst unitaires. Est-ce le cas ? Si oui, ils sont peut être trop laxistes ? Il ne fait pas hésiter à violenter son code. Il n'ira pas se plaindre, on peut en profiter à l'extrême ! (Et en plus ça défoule...)
Marsh Posté le 18-04-2006 à 15:47:53
Tout marche en fait, tout a été testé individuellement avant de faire partie d'un programme qui est encore plus grand que ce que j'ai poster ici.
Au début je en pensais pas que j'aurais besoin de faire des free(). Car j'imaginais pas que le programme final prendrait tant de ressource.
Mais au vue du programme final ( qui marche au passage) , j'ai décidé de paufiner mes structure et de libérer la mémoire quand je le pouvais.
Mais visiblement je m'y prend mal.
Marsh Posté le 18-04-2006 à 15:55:35
Makapouf a écrit : Tout marche en fait, tout a été testé individuellement avant de faire partie d'un programme qui est encore plus grand que ce que j'ai poster ici. |
Faut toujours libérer ce qui a été alloué.
1) c'est propre
2) ça évite de se prendre la tête quand il faut enfin s'y mettre
Autre chose: en lisant ton code de ton 1er post, je vois une "struct sac" (en minuscule) puis des fonctions de type "Sac" (avec une majuscule). S'agit-il d'une erreur ? Est-ce que "Sac = struct sac *" ?
Essaye de nommer tes structures "s_qqchose" et tes types "t_qqchose". Le lecteur qui n'est pas dans ta tête pourra mieux comprendre quoi représente quoi pour toi...
Marsh Posté le 18-04-2006 à 16:01:13
Makapouf a écrit : Tout marche en fait, |
Ah bon ! Alors affaire reglée !
Marsh Posté le 18-04-2006 à 16:09:30
Sve@r a écrit : Faut toujours libérer ce qui a été alloué. |
oui Sac = struct sac *
en fait c'est mis dans le Sac.h que j'ai ajouté apres.
Sinon oui tout marche sans les free(), mais je veux faire quelque chose de plus propre, car quand je lui demande de traiter plus de chose , il comence a prendre 1go de place mémoire Pourtant c'est pas un programme compliqué, c'est "le compte est bon" tu lui donne un certain nombre de chiffre il evalue tout les possibilité possible pour atteindre un résultat voulu. Seul problème, c'est que si je lui donne 5 chiffre ça va, mais 6 chiffre ils sature totalement la mémoire virtuel
Sinon je crois que je vais reprendre mes structure a 0, en vidant corectement systématiquement. même si je comprend pas trop pourquoi ce que j'ai posterne marche pas.
Merci quand même
Marsh Posté le 18-04-2006 à 12:39:10
Bonjour tout le monde.
Je débute en C, et je n'arrive pas à me servir de la fonction free. j'en appel donc a votre aide.
Pour le bien d'un programme j'ai définie une belle structure "Sac" qui se présente sous la forme d'un pile qui contient des tableau qui contiennent des files de caractère.
hors je n'arrive pas a libérer la mémoire de cette structure codé comme ceci:
j'ai fait le test suivant:
SP un tableau, et File, une file de caractère.
dans ce test quand je regarde la charge mémoire dédier, elle arrive a 430mo avant "intermédiaire" ( 270 au départ )
elle redéssend a 411 avant le scanf
elle redessend a 270 avec un controle-C
Je ne comprend pas trop comment libérer tout cet espace perdu
Merci d'avance pour votre aide
Message édité par Makapouf le 18-04-2006 à 14:22:03
---------------
La raison est la mesure de toutes choses! Venez découvrir de la peinture pointilliste