Page 1 sur 1

Mon prog ne marchait plus

Publié : lun. 13/août/2007 18:27
par Chris
J'avais fait un programme il y a déjà longtemps (avec la version 3.92, ça nous rajeunit pas :lol: ), pour trouver les constantes dans les fichiers .h du SDK, et j'en avais fait un executable qui marchait très bien.

Hier, j'ai voulu l'utiliser, et plus moyen de le faire fonctionner. Il se lançait, et au bout de quelques secondes, il se refermait.

J'ai repris les sources sur PB 3.94, j'ai essayé de le lancer : Même problème.

En mode debug, j'ai vu qu'il me plantait sur un PeekS avec comme explication : "Invalid Memory Access", alors que je n'avais pas retouché au code. :roll:

Le but du programme est de charger le fichier dans un tampon, rechercher la constante, et si il ne la trouve pas, se vider et charger un autre fichier pour recommencer.

J'avais donc mis un *Buffer = AllocateMemory(Size) (où Size est la taille du fichier).

Je l'ai modifié en faisant *Buffer = AllocateMemory(Size+1), et maintenant, ça marche. 8O

Allez comprendre. :?
Quelqu'un a déjà eu ce problème?

Publié : lun. 13/août/2007 18:54
par Lna
Toutes les chaînes de caractères en PB se terminent par un $00. 8O
D'où le +1 pour pouvoir l'accueillir et bien fonctionner. 8)

Le PEEKS écrivait le $00 en dehors de l'espace mémoire réservé qui n'était pas autorisé. :roll:

@ peluche

Publié : lun. 13/août/2007 19:07
par Chris
Toutes les chaînes de caractères en PB se terminent par un $00
Oui, ça je le sais.
Mais ce qui m'etonne, c'est que l'executable fonctionnait avant, et plus maintenant.
L'exe ne s'est pas modifié tout seul, quand même. :lol:

Et le source non modifié et chargé dans PB 3.94 non plus, alors qu'il fonctionnait quand j'ai fait l'exe.

Publié : lun. 13/août/2007 19:49
par Anonyme
Certainement une màj de l'api sur lequel s'appuient les commandes du PureBasic. cela m'est déjà arrivé , mais avec un autre type de programme.

Publié : lun. 13/août/2007 19:52
par Lna
C'est windows qui autorise ou non, si les tentatives d'écriture sont possibles ou non. 8O

Ta version de windows lorsque tu utilisais la version 3.92, était la même qu'aujourd'hui ? :idea:
La réservation mémoire pouvait aussi réserver de la memoire par blocs de clusters autorisants l'écriture, et que cette fois ci tu étais arrivé au bout sans le savoir ? :idea:

Code : Tout sélectionner

*pointeur_1=AllocateMemory(5)
*pointeur_2=AllocateMemory(5)

Debug *pointeur_2-*pointeur_1 ; Cluster de 16 octets
Dans tous les cas, il y avait un bug dissimulé qui vient d'être éliminé, par la réservation suffisante de mémoire. 8)

@ peluche