Listes chaînées SANS utiliser Malloc

Listes chaînées SANS utiliser Malloc - C - Programmation

Marsh Posté le 05-04-2005 à 22:43:14    

Bonsoir tout l'monde !  
 
Voilà, j'ai un exercice a faire et j'avaoue ne pas savoir par quel bout le prendre ....  
Je m'explique, je dois coder en C une gestion de liste chaînée mais SANS utiliser la fonction Malloc, bizarre me direz vous ... c'est ce que j'ai dis aussi, on m'a rétorquer, "cest facil" !
Mais pas plus de réponses....bref, je cherche depuis quelques jours sans grand succés(je ne dois pas savoir faire de recherche sur le net..).
Pourriez vous m'indiquer deux trois astuces ou une adresse de site qui traite du sujet plizzz ?
Merci beaucoup.

Reply

Marsh Posté le 05-04-2005 à 22:43:14   

Reply

Marsh Posté le 05-04-2005 à 22:45:51    

salut,
il n'y a peut etre QUE la liste chainee qui doit être faite sans malloc ?
Edit: dans le sens où tu laisses l'utilisateur gérer la mémoire tout seul comme un grand....


Message édité par IrmatDen le 05-04-2005 à 22:46:53
Reply

Marsh Posté le 05-04-2005 à 22:47:50    

Oui, exactement, je dois faire la liste sans malloc, et les autres fonctions allouer désallouer etc... mais ça je pense pouvoir m'en sortir si j'arrive déjà a gérer cette liste noon ?  

Reply

Marsh Posté le 05-04-2005 à 22:55:37    

Où est le problème alors ??

Reply

Marsh Posté le 05-04-2005 à 22:57:43    

LOL
Le problème c'est que je vois pas du tout comment je dois faire pour gérer une listes chainées SANS malloc, je sais que je dois passer par une série de pointeur, avec un "réservoir" qui contiendra toujours l'adresse du dernier élément, mais je ne vois pas plus, je vois pas par ou commencer , comment l'appliquer etc....  
Tu vois le délire non ?

Reply

Marsh Posté le 05-04-2005 à 23:07:54    

mogway95 a écrit :

je ne dois pas savoir faire de recherche sur le net..


C'est le moment d'apprendre :D
Et dans la charte c'est bien spécifié : pas de résolution d'exercice....

Reply

Marsh Posté le 05-04-2005 à 23:13:35    

Mouais... c'est pas trés sympa ça !  
C'est un exercice, pas un examen ! Et c'est bien pour ça que j'ai deman,der si vous aviez des liens de sites ou des astuces pour que JE puisse chercher et surtout COMPRENDRE ...

Reply

Marsh Posté le 05-04-2005 à 23:17:04    

oki t'as du bol que les modos soient pas encore passé par là:)
google -> "liste chainee" et ça roule

Reply

Marsh Posté le 05-04-2005 à 23:20:17    

merci ! Mais je t'assur que si tu fais ça dans google, tu vas tomber sur tout un tas de page ou ils utilisent MALLOC, et ça , ça ne m'intérrèsse pas...
C'est sans Malloc que je cherche, c'est bien le problème !  

Reply

Marsh Posté le 05-04-2005 à 23:28:15    

Au hasard on va prendre cette page : http://www.commentcamarche.net/c/cliste.php3
Alors bien sur ils y parlent de malloc. Mais cela ne concerne pas la gestion de la liste, uniquement son utilisation. Une liste chainée n'est ni plus ni moins qu'une chaîne de pointeurs (d'où son nom d'ailleurs [:petrus75])...

Reply

Marsh Posté le 05-04-2005 à 23:28:15   

Reply

Marsh Posté le 05-04-2005 à 23:30:36    

ok, tu joues sur les mots là... ça j'ai bien compris la suite de pointeurs. mais la fonction Malloc sert a te déplacer etc ? Et ce que je cherche c 'est sans cette fonction, mais si tu sais pas ou ne veut pas laisse couler ...

Reply

Marsh Posté le 05-04-2005 à 23:33:32    

Dis moi plutôt ce que tu ne comprends pas ou te chiffone dans la page que je t'ai filée

Reply

Marsh Posté le 05-04-2005 à 23:38:15    

bah en fait, le fait d'utiliser une structure va forcément appeler une utilisation de malloc dérrière... ça négatif, par contre, j'ai trouver ça mais je ne sais pas si c'est correct avec ce que je veux faire, cad créer liste, allouer,désallouer...
 
http://www.enseignement.polytechni [...] node3.html
 
Dsl pour le lien si il fonctionne pas....

Reply

Marsh Posté le 05-04-2005 à 23:48:53    

:heink: Si je te suis bien, tu veux faire une liste chainée (et je suppose très fortement le programme de test qui va avec) sans toucher à la mémoire dynamique alors que c'est un outil prévu justement pour aider cette gestion ??
Reprenons, la gestion de la liste se fait sans malloc(et autres) ni free. Il s'agit uniquement de son utilisation, a moins de vouloir faire une liste chainée d'éléments déclarés sur la pile du programme ce qui ne servirait strictement à rien...
Je pense que tu as pris l'expression "sans malloc" un peu trop au pied de la lettre pour l'ensemble de ton exercice....

Reply

Marsh Posté le 05-04-2005 à 23:52:53    

hum... je t'assure que non, le prof ne veut pas que l'on utilise malloc, il veut que l'on crée cette liste et qu'on l'a gère (ajout, suppression, etc...) en passant par des "réservoirs"... je t'avoue que pour moi c'est trés trés floue... Et je ne vois pas comment gérer tout ça.
Mais sérieusement, si je te saoule avec mon problème dis le , je comprendrais tinquiète ^^

Reply

Marsh Posté le 05-04-2005 à 23:54:23    

bah ecoute je comprends pas ce qu'il veut ton prof  :??:  
désolé

Reply

Marsh Posté le 05-04-2005 à 23:58:06    

LOL  
c'est bien ce que je lui ai dis, "je comprends pas " !  
Juste pour te donner une idée de l'exercice :  
Le titre c'est :
Allocateur dynamique de zones de tailles fixe(listes chainées) : langage C, sans utiliser les fonctionnalités d'allocation dynamique (malloc).
Ensuite on dois gérer : créer liste, supprimer, allouer, désallouer...
Vala, vala, et je t'avoue que je suis complétement à l'ouest !  ^^

Reply

Marsh Posté le 06-04-2005 à 00:08:20    

je dirais qu'il faut te faire un pool de structures, cad un tableau de structures non initialisées et aller piocher dans ce tableau au lieu de faire des mallocs.

Reply

Marsh Posté le 06-04-2005 à 00:10:16    

par hazard il voudrait pas que vous simuliez la mémoire dans un gros tableau avec plein de structure dedans et une gestion des cases alloué / vides / toussa ?


---------------
LoD 4 ever && PWC spirit|Le topak de l'iMP-450|inDATOUNEwe trust
Reply

Marsh Posté le 06-04-2005 à 00:10:46    

oki ! une info à explorer ! Merci beaucoup ! Tableau de structures, c'est noter et je m'y mets dés demain car là,je t'avoue que je suis rinçé et vais me coucher ! En tout cas je te remercie pour ta patience et ton aide !  ^^
A plus tard peut être !?

Reply

Marsh Posté le 06-04-2005 à 00:11:10    

Mais est-ce que c'est rééllement utile/utilisé cette méthode de liste chainée ??
Edit : mogway : désolé j'avais vraiment pas compris  :sweat:


Message édité par IrmatDen le 06-04-2005 à 00:12:05
Reply

Marsh Posté le 06-04-2005 à 00:12:40    

ah, alors là ? l'utilité n'est pas son but je pense ! dans la classe, on a tous poser cette question, pkoi ne pas utiliser les outils que le langage mets a notre dispo.  
Réponse du saint père le prof : POUR QUE VOUS COMPRENIEZ !  
c'est facil ....

Reply

Marsh Posté le 06-04-2005 à 00:13:38    

mogway95 a écrit :

oki ! une info à explorer ! Merci beaucoup ! Tableau de structures, c'est noter et je m'y mets dés demain car là,je t'avoue que je suis rinçé et vais me coucher ! En tout cas je te remercie pour ta patience et ton aide !  ^^
A plus tard peut être !?


et le tableau tu l'alloues comment
 
 
#define N 100000
 
 
Chainon tab[N] ?

Reply

Marsh Posté le 06-04-2005 à 00:15:03    

apparemment ça serait ça  :??:

Reply

Marsh Posté le 06-04-2005 à 00:15:39    

comme ça là je ne sais pas...  
J'approfondirais le sujet demain là, car je tiens plus... en tout cas merci  et surtout passez une bonne nuit !

Reply

Marsh Posté le 06-04-2005 à 00:17:22    

toi aussi, t'en auras besoin apparemment ;)

Reply

Marsh Posté le 06-04-2005 à 00:19:14    

IrmatDen a écrit :

Mais est-ce que c'est rééllement utile/utilisé cette méthode de liste chainée ??


 
Ca permet de faire une grosse allocation au début, dans une appli multitaches si toutes les taches utilisent des pools et que tes pools sont bien dimensionnés, ca permet de detecter un problème de mémoire dès le début de l'execution et pas 5 ans après quand deux taches auront envie de faire des gros malloc simultanément.
 
Ca permet aussi de gérer une saturation des pools avant de sortir une grosse erreur sur echec d'allocation.
 
 

Reply

Marsh Posté le 06-04-2005 à 00:23:55    

:whistle: ah oui j'étais loin de penser à tout ça !! merci de l'info

Reply

Marsh Posté le 06-04-2005 à 00:47:06    

Taz a écrit :

et le tableau tu l'alloues comment
 
 
#define N 100000
 
 
Chainon tab[N] ?


 
bah tu sais c'est un exo, c'est des profs toussa [:spamafote]


---------------
LoD 4 ever && PWC spirit|Le topak de l'iMP-450|inDATOUNEwe trust
Reply

Marsh Posté le 06-04-2005 à 01:14:58    

pinguin007 a écrit :

bah tu sais c'est un exo, c'est des profs toussa [:spamafote]


à part la connerie, je ne vois pas ce qui peux justifier ce genre de trucs. Ah si, l'envie d'une stack overflow  au lancement du programme.

Reply

Marsh Posté le 06-04-2005 à 04:38:25    

Taz a écrit :

à part la connerie, je ne vois pas ce qui peux justifier ce genre de trucs.


 
Ben par exemple si tu as besoin d'écrire un allocateur. Et que ton algo d'allocation/désallocation utilise une liste chainée.
La question c'est comment gérer ça sans que l'allocateur ait à s'appeler lui-même.

Reply

Marsh Posté le 06-04-2005 à 08:39:29    

mogway95 a écrit :

Voilà, j'ai un exercice a faire et j'avaoue ne pas savoir par quel bout le prendre ....  
Je m'explique, je dois coder en C une gestion de liste chaînée mais SANS utiliser la fonction Malloc, bizarre me direz vous ... c'est ce que j'ai dis aussi, on m'a rétorquer, "cest facil" !


Il suffit de créer un 'pool' statique et de gérer l'allocation à la main. Ca implique que les noeud de la liste chainée aient une taille fixe et qu'ils soient linéaires. Pas très efficace, et anti-généricité...
 
Je ne vois pas trop l'intérêt à part apporter une reflexion sur ce qu'est un allocateur de ressources... Pourquoi pas...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 06-04-2005 à 09:16:15    

Taz a écrit :

à part la connerie, je ne vois pas ce qui peux justifier ce genre de trucs. Ah si, l'envie d'une stack overflow  au lancement du programme.


 
J'ai déjà fait ça dans ma tendre jeunesse, pour une utilisation très très marginale: quand on souhaite écrire du code qui n'utilise pas la lib standard (pas de malloc, de printf, etc.).  
 
Ca permet de gérer soi-même toute la mémoire qu'on utilise sans avoir à dépendre d'un appel particulier pour obtenir la-dite mémoire (en fait, c'est le couple linker/loader qui fait tout le boulot). Ca permet donc d'avoir des executables plus petits, et également d'utiliser des addresses immédiates (ça c'est vraiment de bas niveau), plutôt que d'avoir à déréférencer des pointeurs. Ca m'étonnerais même pas que quelques virus fonctionnent comme ça d'ailleurs.

Reply

Marsh Posté le 06-04-2005 à 11:00:09    

non, ce que je veux dire, c'est que la formulation est stupide. Faire une simulation de pointeur dans un tableau (on référence pas avec un pointer, mais avec un indice), ça je comprends, c'est un exercice scolaire, j'en ai fait. Mais dire "sans malloc" ... ça veut rien dire. malloc c'est juste une façon d'obtenir de la mémoire, en grande quantité.
 
 
Lam's > rien à voir.

Reply

Marsh Posté le 06-04-2005 à 12:10:34    

Emmanuel Delahaye a écrit :

Il suffit de créer un 'pool' statique et de gérer l'allocation à la main. Ca implique que les noeud de la liste chainée aient une taille fixe et qu'ils soient linéaires. Pas très efficace, et anti-généricité...
 
Je ne vois pas trop l'intérêt à part apporter une reflexion sur ce qu'est un allocateur de ressources... Pourquoi pas...


sans malloc ça veut dire que la chaîne restera "vide" de toute donnée stockée en mémoire, y'aura que la gestion des adresses à faire...
 
Par contre utiliser un grand tableau pour le faire, bah c bidon parce qu'une liste chaînée n'est po contigüe en mémoire... Faut ptet simuler ça justement... [:airforceone]  
 
 
Ton prof vous a donné un cas d'utilisation de votre programme ? Ou ça reste pure "théorie" ?

Reply

Marsh Posté le 06-04-2005 à 15:41:04    

Taz a écrit :

non, ce que je veux dire, c'est que la formulation est stupide. Faire une simulation de pointeur dans un tableau (on référence pas avec un pointer, mais avec un indice), ça je comprends, c'est un exercice scolaire, j'en ai fait. Mais dire "sans malloc" ... ça veut rien dire. malloc c'est juste une façon d'obtenir de la mémoire, en grande quantité.



Message édité par Emmanuel Delahaye le 06-04-2005 à 15:41:38

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 06-04-2005 à 18:12:09    

L'utilité de ce type de fonctionnement (pas d'allocation dynamique) réside le fait que le programme demarre et requisitionne une fois pour toute la mémoire nécessaire.
On ne se retourve jamais  dans le cas "plus de memoire dispo".
=> Fiabilité  
=> Pas de gestion d'erreur d'allocation mémoire.
 
Evidement c'est gourmand en mémoire !
A+


Message édité par m3z le 06-04-2005 à 18:13:23
Reply

Marsh Posté le 06-04-2005 à 18:38:52    

Emmanuel > j'aime bien ta façon de coder, mais des fois j'ai l'impression que tu fais le concours de l'indentation la plus profonde :/ et puis des fois, y a des virgules en début de ligne, c'est pas tip top :P
 
/* private variables =================================================== */
 
mem_s G;
 
ben pourquoi elle est pas static ?

Reply

Marsh Posté le 06-04-2005 à 19:50:18    

Taz a écrit :

Emmanuel > j'aime bien ta façon de coder, mais des fois j'ai l'impression que tu fais le concours de l'indentation la plus profonde :/ et puis des fois, y a des virgules en début de ligne, c'est pas tip top :P


 
En fait, c'est logique. J'ai un peu lancé cette mode sur certains forums Usenet et c'est repris petit à petit.. En effet, dans une liste de paramètres, la virgule appartient au paramètre suivant (le premier n'en a pas) :  
 
p1 [, p2[, p3[, p4[,*]]]]
 
Il est donc logique de coder comme ça si il y a beaucoup de paramètres :
p1  
, p2
, p3
, p4
 
les virgules sont alors automatiquement alignées par l'intendeur, ça facilite la maintenance par copié-collé...
 
Bref, c'est pas un gros problème...
 

Citation :


/* private variables =================================================== */
 
mem_s G;
 
ben pourquoi elle est pas static ?

Petit oubli... Voilà, c'est corrigé.


Message édité par Emmanuel Delahaye le 06-04-2005 à 19:57:57

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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