1

bonjour tout le monde j'espère que quelqu'un pourra trouver une solution à mon problème.
Dans mon programme, à un endroit particulier du programme, la fonction calloc fait planter ma caltos sans aucune raison apparente.
Voici l'instruction où ça coince : char *ptr = calloc(500,1);
Je suis bien sûr qu'il s'agit de cette instruction car à la ligne juste avant, j'ai écrit une instruction ordonnant d'afficher un message et de même à la ligne juste après. Le premier message est bien affiché mais pas le second.
Pour l'info, j'ai fait tourner le programme sur TI-89 titanium avec la librairie genlib. De plus, le programme n'alloue pas beaucoup de blocs mémoires donc le plantage n'est surement pas du à une saturation du heap...

2

Ton bug se trouve bien avant l'appel à calloc(), tu dois écrire en dehors d'une zone de mémoire allouée, soit en écrivant en dehors des limites d'un tableau, soit en utilisant un pointeur qui pointe n'importe où. Et comme ta mémoire est corrompue, au moment où calloc recherche une zone de mémoire libre à allouer, il fait n'importe quoi et provoque le crash
avatar

3

j'ai bien vérifié et je crois pas que c'est le cas.
Est-ce que c'est possible que ce soit une erreur de compilation ? (j'utilise TIGCC v0.95 je devrais peut être l'updater...)

4

Tu devrais absolument l'updater: la version 0.95 est significativement dépassée...

Aze a probablement raison, c'est très rare que TIGCC fasse des erreurs de compilation wink
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

5

AMHA, même si je conseille dans tous les cas de passer à la dernière bêta de TIGCC (ne te fais pas effrayer par la marque "beta", c'est comme les "betas" de Google, elles sont parfaitement utilisables wink), je pense que l'erreur a de fortes chances de se trouver dans ton programme. C'est vite fait, un dépassement de tableau. Je te rappelle qu'un tableau int toto[n] a les indices valides de 0 à n-1, tout autre indice créera un débordement, dont les conséquences sont imprévisibles.
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é

6

Kevin, toi qui te donne le droit de donner des conseils à tout le monde, sache que moi je te conseille de mettre à jour ton site. Ca rendra service à tout le monde.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

7

kingkev> des fois la corruption peut venir d'un truc ausis bête qu'un sprite qui est affiché en dehors de l'écran et qui déborde sur le reste de la mémoire. mais je suppose que genlib a des routines clipées et que le bug vient d'ailleurs. mais c'est surtout pour dire que ça peut venir de choses innatendues
avatar

8

9

kingdev> Le problème se produit-il dès le lancement du programme ou bien faut-il attendre que tu « joues » un peu pour qu'il se manifeste ? Essaie de désactiver un maximum de choses dans ton programme de façon à réduire le plus possible le nombre de lignes de code impliquées dans l'apparition du problème.
avatar
« 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. »

10

e te fais pas effrayer par la marque "beta", c'est comme les "betas" de Google, elles sont parfaitement utilisables


OUh la comparaison grin
Tout ce qui passe pas par le port 80, c'est de la triche.

11

Sasume> il se produit à un "endroit" particulier du programme, et dès la première fois que l'exécution passe par cet endroit.

12

la dernière fois que j'ai eu un problème de ce genre, j'ai passé 1 semaine à chercher l'origine du bug, puis j'ai recommencé le programme de zéro grin

Mais garde espoir!

13

./11 Cela simplifie le débuggage alors smile
Qu'est-ce que tu as écrit, juste avant et juste après ?
avatar
« 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. »

14

Sasume (./13) :
./11 Cela simplifie le débuggage alors smile
pas forcément, parce que en modifiant le code quelque part, son bug peut "disparaître" sans que l'erreur ne soit corrigée. Mais c'est quand même un bon point de départ.

15

tiens, un valgrind dans TiEmu ça serait cool ^^ (pour le coup ça ferait un bon avantage à tiemu)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

16

et un profiler ?
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

17

(Je parie que Kevin va écrire un truc du genre "patches are welcome" grin)
./16 semblerait plus facile que ./15, parce que Valgrind ne semble pas avoir de support m68k.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

18

par "un valgrind" je sous-entendais un outil du même type que valgrind (sachant que l'émulateur existe déjà, adapter valgrind ne me semble pas être la meilleure solution, il faudrait mieux ajouter à TiEmu la possibilité de contrôler les lectures/écriture en ram)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

19

Il est peut-être faisable de faire une interface à l'émulateur qui permet à réutiliser une partie du code de Valgrind, en revanche ça deviendra encore plus une usine à gaz, c'est déjà le bordel avec le code de UAE, celui de GDB et le nôtre. En revanche, une telle interface pourrait aussi permettre d'utiliser les profilers de Valgrind (cachegrind, callgrind).
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é

20

21