1

Edit : ça m'apprendra à faire des topics pour des questions connes...
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2

J'ai édité mon 1er post en croyant avoir résolu le problème mais en fait pas du tout... A vrai dire je suis en train de péter un cable, si ça se trouve c'est tout simple mais je n'arrive pas à m'en sortir sad

J'explique la situation : Vertel bug (adress error). Je sais exactement à quelle ligne du programme basic on trouve l'appel de la lib qui bug, et je sais à peu près ou ça plante dans la lib elle-même.
Mais c'est en fait un peu plus compliqué :
- Je n'arrive pas à reproduire le bug avec un autre prog basic. Même en isolant les quelques lignes qui entourent celle qui bug, ça passe sans problème. Le seul moyen que j'ai de produire ce bug est de lancer le programme en entier.
- La ou les lignes qui bug(gent) dans vertel proviennent de la doc de TIGCC, et sont présentent depuis les 1ers versions, elles ne m'ont jamais posé de problème.

Voilà les qq lignes :

- En basic l'appel qui fait bugger :
mainvertel("drw_pict","screen",0,0,1,"/","drw_pict","img",70,10,1)
(plus précisement c le 1er drw_pict qui fait bugger, mais c pas ça le problème)

- En C l'endroit ou ça plante
SYM_ENTRY *sym_var=vat_open(chr_var); // Crée un pointeur vers une variable TiOS
unsigned char *chr_pic=NULL;
if(peek(HToESI(sym_var->handle))==0xDF)
{
chr_pic=HeapDeref(sym_var->handle);
if(int_szx) *int_szx=*(unsigned int*)(chr_pic+4);
if(int_szy) *int_szy=*(unsigned int*)(chr_pic+2);
PortSet(vod_scr,239,127);
BitmapPut(int_psx,int_psy,HeapDeref(sym_var->handle)+2,&scr_ttl,int_mod);
PortRestore();
}


En gris j'ai mit les 2 lignes qui, une fois retirées, enlevent le bug. Le 'if' fait donc planter, ainsi que le bitmapput. Tous les 2 provoquent une "adress error".
J'ai passé du temps à essayer de comprendre, de tester, mais sans résultat. Par contre je sais que la chaine qui représente le nom de variable est tout à fait valable, je l'ai testée à peu près à toutes les étapes.

Voilà... Si qqun voit une solution... sad
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

Mets nous un if (!sym_var || !(sym_var->handle)) return; avant ton if.
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é

4

erf amusant... ça ne devrait pas résoudre mon bug et ça le résoud quand même grin
décidément il est très fort ce kevin smile

Je m'explique : normalement le pointeur SYM_ENTRY est valide dans mon exemple, puisque j'appelle une PIC qui existe. Mais étrangement l'ajout de cette ligne a quand même éliminé le bug.
Merci donc, j'ai maintenant un autre problème de compréhension mais ça devrait être moins compliqué smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

5

Tant que j'y suis, une petite question :

C'est quoi exactement la différence entre if(sym_var) et if(sym_var->handle) ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

Le premier teste si le pointeur lui-même est valide. Le deuxième teste si l'entrée handle de la structure est valide.
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é

7

ok, donc il n'est pas toujours nécessaire de faire ce test... uniquement quand on a besoin de lire ou modifier l'entrée handle, c'est ça ? (parceque ça allourdit un peu, tous ces tests sad)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

8

Bob 64
a écrit : ok, donc il n'est pas toujours nécessaire de faire ce test... uniquement quand on a besoin de lire ou modifier l'entrée handle, c'est ça ?

Oui. Mais si tu as besoin de cette entrée, il vaut mieux faire ce test, sinon:
{1,2}->x:{1,2}->y:LinReg x,ygrinelVar x,y
mainvertel("drw_pict","regeq",0,0,1)

-> Address Error[nosmile]
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é

9

Bien, merci pour tout... J'ai inclus ce test à deux autres endroits ou ct nécessaire, je perd environ 100 octets mais vu l'ampleur du bug c'est plus qu'indispensable.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)