Problème de gestion de liste chainée - C - Programmation
Marsh Posté le 16-04-2006 à 19:29:31
LorDjidane a écrit : |
Ne compile pas
|
Je te conseille de commencer par travailler sur les listes chainées sans trop de préoccuper des données (un simple 'int' de contrôle suffit). Ensuite, tu compliques en mettant des données plus complexes. une structre allouée dynamiquement, par exemple...
Marsh Posté le 16-04-2006 à 17:45:24
Bonjour à tous.
Je dois réaliser un programme qui simule la gestion de mémoire d'un ordinateur, via liste chaînée.
Avec ce que j'ai fait, j'ai pu créer un processus. Mais dès que j'en crée un, il m'est impossible d'en créer un autre sans avoir de plantage au milieu. De plus, quand je veux afficher ma liste, j'ai un plantage lorsque j'ai créé un processus, sinon ça va (mais bon, sans processus, ça me fait un bloc à afficher, pas trop utile).
Je soupçonne mes pointeurs de se ballader un peu comme ils veulent, malheureusement, j'ai beau refaire le cheminement de mon programme sur une feuille de papier, je ne comprends pas ce qui se passe. De fait, une aide serait la bienvenue svp.
Voici le code (sans toutes les fonctions, uniquement celles utilisées) :
(les printf("Arret" ); me servent à savoir, avec les tests ci-dessous, à quel niveau mon programme plante)
Quelques tests :
Je ne crée rien et affiche directement la liste, aucun problème :
Fonction Affichage
Bloc Numero : 0
Taille : 512
Debut : 0
Utilisateur : ---
Tache : ---
------------------
Je crée un processus uniquement, aucun problème :
Fonction Ajouter
Utilisateur lordji
Tache: gaim
Taille: 50
Arret 1 ok
p->val.numero = 0
e.numero = 0
Arret 2 ok
Valeurs pour le bloc libre p : debut 0 taille 512
Tache de lordji intitulee gaim de taille 50
J'en crée un autre tout de suite après, j'ai droit à un freeze à la fin de ce qui s'affiche en dernier, le programme a l'air de boucler un peu, puis ma console (sous win) plante ("ce programme va se terminer (...)" ) :
Fonction Ajouter
Utilisateur lordji
Tache: gcc
Taille: 120
Arret 1 ok
p->val.numero = 1
e.numero = 0
Arret 2bis ok
Arret 2bis ok
Quand, après avoir créé un seul processus, je demande l'affichage de ma liste, j'ai de même que ci-dessus, un freeze (avec tournage en rond avant) ; ce qui me surprend, c'est qu'il n'affiche pas les deux dernières chaînes de caractère :
Fonction Affichage
Bloc Numero : 1
Taille : 50
Debut : 0
Utilisateur : lordji
Tache : gcc
------------------
Bloc Numero : 0
Taille : 462
Debut : 50
Voilà, c'est un peu long, désolé, mais c'est pour clarifier au maximum la chose.
D'avance merci.