1

Je désespere sad

Encore un problème de RAM non libérée à la fin d'un prog, mais la j'ai vérifié et tous les malloc / calloc sont 'free()' a la fin. Il reste donc quelque part une (ou plusieurs) instructions qui pompent de la ram, mais je ne sais absolument pas lesquelles.

N'auriez-vous pas en tête quelques fonctions qui nécessitent un free(), mais qui sont succeptibles d'être oubliées ? Parceque je cherche mais je ne vois rien sad
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2

Ben je pense qu'en regardant les headers de TIGCC tu devrais trouver ça...
Regarde vers ça, je pense que tout ce qui est lié à l'allocation dynamique de mémoire doit être là.
avatar
;)

3

Merci BiHi !
Apparement l'erreur est dans cette fonction, mais je ne vois pas vraiment où vu qu'elle existe depuis un moment et ne m'avais jamais posé de problèmes :

char *makevar(char *chr_var,int int_siz)
{
SYM_ENTRY *sym_var;
char *chr_ptr;
if(!strlen(chr_var))
{
ST_helpMsg("Pas de nom de fichier precisé")
return 0;
}
if(!((sym_var=vat_open(chr_var)) || (sym_var=DerefSym(SymAdd(vat_name(chr_var))))))
{
ST_helpMsg("Erreur de création de fichier")
return 0;
}
chr_ptr=(char*)HeapDeref(sym_var->handle=HeapAlloc(int_siz));
*(unsigned short*)chr_ptr=int_siz-2;
return chr_ptr;
}
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4

Ben, tu appelles HeapAlloc, donc tu alloues de la mémoire!

Et tu fais ça même si le fichier existe déjà! C'est une grave erreur! Il faut appeler HeapRealloc sur le bloc existant si le fichier existe déjà!!!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

5

Ahhhhhhhh !!!

Je me disais bien que c'était pas très propre quand j'ai écrit ça, mais d'un autre coté je ne voyais pas d'autre solution...

Merci smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

eekeekeekeekeek

Le prog à prit 500 octets de plus avec cette fonction ? C'est normal ? sad
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

7

Je ne pense pas. (C'est bien HeapRealloc que tu as utilisé, et pas realloc, qui n'est pas la bonne fonction ici de toute façon?) Poste ton code changé pour que je puisse comparer.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

8

500 octets ??? alors que HeapAlloc est une rom call ??? humhum
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

9

Erf je me disais aussi y'avait qqchose qui n'allait pas grin
Fausse alerte, désolé smile

Kevin > J'ai juste remplacé HeapAlloc par HeapRealloc, puisqu'il appelle HeapAlloc si le handle est NULL :

char *makevar(char *chr_var,int int_siz)
{
SYM_ENTRY *sym_var;
char *chr_ptr;
if(!strlen(chr_var))
{
#ifdef Developper
ST_helpMsg("var_make : Pas de nom de fichier precisé")
#endif
return 0;
}
if(!((sym_var=vat_open(chr_var)) || (sym_var=DerefSym(SymAdd(vat_name(chr_var))))))
{
#ifdef Developper
ST_helpMsg("var_make : Erreur de création de fichier")
#endif
return 0;
}
chr_ptr=(char*)HeapDeref(sym_var->handle=HeapRealloc(sym_var->handle,int_siz));
*(unsigned short*)chr_ptr=int_siz-2;
return chr_ptr;
}
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)