1

Bonjour à tous!

Il se trouve que, toujours dans mon projet de programme de création d'images, j'ai un nouveau problème.
En effet j'utilise deux tableaux (je sais pas trop si je peux les appeler comme ça ou pas) alloués en mémoire avec un joli...
unsigned char *tableau_image_clair=malloc(((longueur_image+1)*(largeur_image+1))/8); unsigned char *tableau_image_sombre=malloc(((longueur_image+1)*(largeur_image+1))/8);

...sachant que "(longueur_image+1)*(largeur_image+1)" doit être divisible par 8.

Or, comme je l'ai dit précédement dans un autre sujet, je souhaite que mes images puissent fait jusqu'à 255x255 pixels.
J'ai donc testé mon programme en mettant longueur_image=250 et largeur_image=140 et là... bug (ben oui je vous poste pas un sujet pour vous dire que tout va bien grin ).
J'ai donc tatonné dans les valeurs de mes longueurs/largeurs jusqu'à me rendre compte que le bug ne se produisait pas jusqu'à 250*131 mais qu'à partir de 250*132.
Remarque intéressante :
250*131=32750<
32767=borne supérieure de l'intervalle d'un short<250*132=33000
...Est-ce juste du hasard?

La logique voudrait que le bug soit dû à un dépassement de mémoire. J'ai pû vérifier ça en testant le retour de mes "malloc" : j'obtiens "NULL".
Cependant je ne parviens pas à expliquer ce dépassement... Mes allocations nécessitent au maximum (pour une image de 255x255 pixels composée de deux tableaux) 16384 octets. Ca ne devrait donc poser aucun problème à l'émulateur qui a près de 200k de RAM. De plus l'émulateur a une mémoire "vide" quand je lance mon programme donc le problème ne vient pas d'une mémoire trop dispersée empêchant de tros gros blocs d'être écris (et encore, c'est pas si énorme que ça, mes 8192x2 octets de tableau -_-).

J'ai aussi envisagé le fait que je dépasse la limite des 24k (mon programme fait 5,6k pour le moment) mais même après avoir installé Preos (dernière version) qui supprime cette limite j'obtiens le même problème.

Je suis enfin allé voir dans la doc de TIGCC qui ne fait part d'aucune limitation de taille d'une allocation réalisée avec malloc..

Je ne vois vraiment pas ce qui peut clocher!

Quelqu'un aurait-il une idée de la façon dont nous pourrions résoudre mon problème s'il-vous-plaît?

Merci d'avance,

Daniel.
avatar
Ancien pseudo : worfang.

2

La taille maximum allouable avec malloc est 65518.
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é

3

Merci de la précision! Cependant le problème ne peut pas venir de là.. Je suis bien en-dessous de cette limite.
avatar
Ancien pseudo : worfang.

4

Je parie que longueur_image et largeur_image sont des int smile
Le calcul est effectué par le compilateur sur des int et il y a donc dépassement de capacité (32767 est la valeur maximale d'un int).

Essaie de déclarer ces deux variables pour qu'elles soient du type long, pour voir.
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.

5

Hmm bien vu Thibaut!
J'ai encore un autre bug mais déjà ma calculatrice ne me signale plus le dépassement de RAM.
Merci!
avatar
Ancien pseudo : worfang.

6

J'ai fait le calcul vite fait pour m'amuser. Si je ne me suis pas trompé, le résultat du calcul avec des int était 61469. Ton progamme allouait 2 blocs de 60ko, et visiblement ta machine n'avait pas assez de RAM pour ça.
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

En fait mes deux variables étaient déclarées en unsigned char et non en int. Mais la solution est la même. tongue
avatar
Ancien pseudo : worfang.

8

C'est bon j'ai résolu tous les bugs d'allocations (et les autres bugs en découlant... la vache y'avait du boulot ^^). Bon allez je m'attaque à la suite!
avatar
Ancien pseudo : worfang.

9

Un bit par pixel plutôt qu'un octet ca serait pas mieux ?
Par ce que la ca va demander une consommation mémoire énorme !
Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici

10

Ben oui on est d'accord. smile
avatar
Ancien pseudo : worfang.