null Le 30/08/2003 à 12:40 Voilà, je suis entrain de faire un programme qui interprète un pseudo language d'un fichier TEXT pour pouvoir faire des textes en niveau de gris et des pages "dynamiques" mais j'ai pas mal de problèmes avec les tableaux.
Je me suis rendu compte que déclaré à certains endroits, il y a pas mal de problèmes. Alors j'ai décidé de les allouer mais finalment j'en ai toujours autant.
typedef struct
{
unsigned char return_line:1;
unsigned char stick_char:1;
unsigned char color:2;
unsigned char center:1;
unsigned char under_line:1;
}Str_Mode;
typedef struct
{
char chaine[80];
Str_Mode param;
}Text;
Text *TEXT;
TEXT=malloc(sizeof(Text)*100);
Alors déjà, même si la chaîne fait 10 de long il y a des problème si la taille de chaine est inférieur à 80... je ne sais pas trop pourquoi mais bon ?!
Ensuite si la valeur ici : TEXT=malloc(sizeof(Text)*100); est inférieur à 100, c'est pareil j'ai des problèmes, même si j'ai trois chaine stockées.
Ca se traduit par du texte d'un autre fichier qui vient de mettre dedans ou alors des paramètres qui ne marchent pas...enfin c'est très capricieux.
Par contre je ne sais pas où vontchar chaine[80]; lorsque je fais ça TEXT=malloc(sizeof(Text)*100); ? C'est sur le stack, ou c'est alloué ?
Et en faisant comme cela : TEXT=malloc(sizeof(Text)*100);, ça alloue bien un tableau de 100 ?
En fait ce que ej veux faire c'est pour chaque éléments de TEXT (TEXT[0], TEXT[1], ...) c'est d'avoir une chaine de taille assez grande mais pas forcément déterminé à l'avance et un paramètre.
Et là je ne suis pas sûr de ce que je fais vu le nombre de problèmes créer à causes de ces tableaux.
www.wikio.fr/user1921&info=comments
null Le 30/08/2003 à 13:12 Ouais mais comme la chaîne fait 80 octets, il y a peut-être des problèmes lorsqu'elle en fait moins.
www.wikio.fr/user1921&info=comments
Bah de toute façon, tu auras au moins 80 octets alloués, donc s'il peut y avoir des pb, c'est si la chaine fait plus.
Je pense que tu n'as pas bien compris.
Poste ton code.

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
Au lieu de faire :
Text *TEXT;
TEXT=malloc(sizeof(Text)*100);
fait:
Text TEXT[100];
Je sais pas si ça change grand chose ... mais, essaye tout de même
null Le 30/08/2003 à 14:03 Ouais je vais essayer mais c'est ce que je faisais avant.
www.wikio.fr/user1921&info=comments
Ce n'est pas impossible que ça plante si tu essaies d'allouer sur la pile : ton tableau fait 100*(100+1) octets, soit 10100 octets. Si on rajoute l'écran à sauver à cause du SAVE_SCREEN,, on est déjà à 13940, on est assez proches de la limite autorisée...
Au fait, tu ne vérifies jamais le succès de tes mallocs, tu devrais le faire. Vu la quantité de RAM que tu demandes, ça peut peut-être venir de là, tes pb.
Sinon pourquoi tu alloues un bloc de 2 octets ? (char *current_param=malloc(2*sizeof(char));)

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
null Le 30/08/2003 à 14:39 Ouais, c'est même exactement ça ! je suis obligé de faire un memset à chaque fois pour effacer le tableau Text TEXT[20]; ... c'est normal ? Normalment il faut mettre static pour que ça reste, non ?
www.wikio.fr/user1921&info=comments
null Le 30/08/2003 à 14:46 Ce que je ne comprends pas non plus c'est pourquoi en dessous de 80 (pour les chaine) il y a aussi des problème.
www.wikio.fr/user1921&info=comments