Certainement erreur d'allocation de memoire .....

Résolu/Fermé
glupidon - Modifié par glupidon le 11/02/2015 à 10:07
 glupidon - 19 févr. 2015 à 10:14
Bonjour,

a peine sortie d'un problème un autre ce montre ....
( j'espère trouver autant d'aide que sur mon dernier post c'était cool )

je m'explique !

je cherche a afficher le contenue d'un fichier.txt dans mon programme !
ce dernier s'affiche ligne par ligne via ma fonction get_next_line .
pour le moment tout va bien , enfin presque !

quand , suite a sa je cherche a faire afficher (de la même manière) un autre fichier.txt
je retrouve des caractère de mon précédent fichier.txt qui viennent mettre le bazars dans ce nouvelle affichage ....

d'après moi le problème vient d'une erreur d'allocation mémoire mais qui reste invisible a mes yeux ....

je ne peut pas vous fournir de code compilable car sa reviendrais a vous envoyez mon projet entier donc sa risque d'être long ....

ci dessous les deux fonction qui me permette d'afficher mes fichier.txt


int preliminary()
{
int fd;
char *head;
int l;
int nbr;

system("clear");
l = 0;
if ((fd = open("header.txt", O_RDONLY)) == -1)
return (0);
while (l < 42)
{
head = get_next_line(fd);
l++;
my_putstr(head);
}
my_putstr("\npress ENTER to continue or press 1 to read the rules\n");
if (read(0, head, 50) == -1)
return (0);
nbr = my_getnbr(head);
if (nbr == 1)
the_rules();
else
map();
return (0);
}

int the_rules()
{
int fd;
char *rule;
int l;

system("clear");
l = 0;
if ((fd = open("rules.txt", O_RDONLY)) == -1)
return (0);
while (l < 15)
{
rule = get_next_line(fd);
l++;
my_putstr(rule);
}
if (read(0, rule, 50) == -1)
return (0);
map();
return (0);
}


je vous présente également le fonction qui permet leur affichage


char *get_next_line(const int fd)
{
static int i;
char *str;
char *buffer;
int b;
int a;

a = 0;
b = 0;
if ((str = malloc(a)) == NULL)
return (0);
if (str[b] == '\n')
b = i + 1;
if ((buffer = malloc(a)) == NULL)
exit (1);
while (str[0] != '\n')
{
if ((read(fd, str, 1)) == -1)
{
my_putstr("error with read in fonction get_next_line\n");
exit (1);
}
buffer[a] = str[0];
a++;
i++;
}
free(str);
return (buffer);
}


et voila le merveilleux résultat que cela me donne



this is the rules of the games
'----------------' '----------------' '----------------' '----------------'

ules of the games
'--is the ------' '----------------' '----------------' '----------------'
* the goal of this game is to
---------' '----------------'
achieve to leave the last

match.

* the person who will take the
last match will be the loser

ser
* you have the possibility to
remove one or various match
on a single line of your
choice .

press ENTER to play a games


voila je pense vous avoir donner le plus important !
merci de m'aider si vous le pouvez !!
A voir également:

2 réponses

bonjour tout le monde,
(bien qu'encore seul sur mon post pour le moment)

mon problème persiste !
pas moyen de trouver une solution adéquate !

je vais reformuler ma question, car en général je ne suis pas très claire
(je fais bref)
  • j'affiche une première fois un "fichier.txt" qui fonctionne bien
  • je réalise un système (" clean ") ;
  • je laisse à l'utilisateur le choix d'ouvrir d'autre fichier.txt


mais lorsque ce second "fichier.txt " s'affiche,
je retrouve a de nombreux endroits des caractères parasite qui proviennent tout droit du tout premier"fichier.txt" que j'ai affiché .
sa rend le second fichier quasiment illisible du-coup.

problème d'allocation ?
ou es due à l'appel système ?

pas la moindre idée !
n'hésitez pas à me laisser toutes vos idées ou conseilles !
elles sont les bienvenue ^^

dans l'attente de votre aide !
merci de votre attention !

PS : désoler pour les nombreuses fautes d'orthographe , on diraie certainement pas mais j'ai fait de mon mieux ..... dyslexie oblige !
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
Modifié par fiddy le 13/02/2015 à 21:15
Bonjour,

Vu que tu n'utilises pas de fonctions standards (open(), get_next_line(), ...), cela nous est difficile de t'aider... Voilà pourquoi je te recommande une fois de plus d'utiliser du standard ;-).
Tu obtiendras plus d'aide...

Google is your friend
0
je voie ce que tu veut dire !
merci quand même !
j'ai fini par trouver une solution seul quand même !
le problème est donc résolut
0