Longueur des chaines : Le retour

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Longueur des chaines : Le retour

Message par Chris »

En principe, quand on charge un fichier de plus de 64 Ko en mémoire avec AllocatMemory(), on peut récupérer le contenu du tampon par tranche de 64 Ko avec Valeur$ = PeekS(*Tampon, Longueur).

Je me trompe :?: :?:

Avec le code qui suit, j'ai un MEGA plantage avec redémarrage du PC.

Le fichier que je charge en mémoire est une copie du fichier "APIFunctionListing.txt" qui fait 230 Ko et qui se trouve dans le dossier "Compilers"

Je l'ai renommé, au cas ou...

Code : Tout sélectionner

Fichier.s = "D:\PureBasic\FichierTest.txt"
Size = FileSize(Fichier)

If ReadFile(0,Fichier)
  *Buffer = AllocateMemory(Size)
  If *Buffer
    ReadData(*Buffer, Size)
  EndIf
  CloseFile(0)
EndIf

a$ = PeekS(*Buffer,50000)
Debug a$
Dans l'exemple, "a$" fait 50 Ko, et donc, est encore dans la limite des 64 Ko.
Il me semble qu'on en avait déjà parlé, mais j'ai pas trouvé ou.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

ça serait pas le debug A$ qui provoque le plantage.

Si ce n'est pas ça, initialise a$: a$=space(50000)

:)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Exact, mais mon plantage à lieu si je dépasse 32000 octets!
(J'ai pas essayé à l'octet près, il plante à 32767, et je vais pas faire que ça de redémarrer à chaque fois) :cry:

On est loin des 64 Ko, il me semble :?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Rien ne t'oblige à passer par un debug pour faire tes tests, met tes données dans un fichier.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

@Nico

A mon avis, il n'y a pas de raison d'initialiser la valeur de la variable a$ à partir du moment ou on ne dépasse pas le seuil des 64 Ko!

De toute façon, il y a un méchant bug au niveau de debugger ou du compilo, parce que ça ne devrait pas planter aussi violemment!
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Chris,

j'avais pas bien lu ton post.

Essaye de faire ça

a$ = PeekS(*Buffer,size)
Debug a$


car tu essaye de lire dans la mémoire qui n'est pas alloué puisque tu as alloué une taille de size (environ 30 Ko d'après ce que tu dit mais tu essaye de lire au-delà.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Pour moi non plus Chris, puisque je t'ai dit que je pensais que ça venait du debugger, c'était juste une idée au cas où ça ne viendrait pas de là; car pour moi ton code est correct.

Personnellement, je pense que tu fais quand même une utilisation abusive du debugger!

:)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Size, c'est la taille du fichier. (Il fait 230 Ko)

J'ai bien alloué la mémoire, puisque j'ai fait
*Buffer = AllocateMemory(Size)
j'ai bien alloué 230 Ko de mémoire.

Si je fais a$ = PeekS(*Buffer,size) , je vais essayer de faire rentrer 230 Ko dans une chaine qui ne peut en contenir plus de 64
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Ha bon, j'ai cru que ton fichier faisait 30 Ko :roll:
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je viens de tester ton code avec le même fichier et ça marche sans problème sans plantage

Le fichier fait 235134 octets et a$ s'affiche dans le debbuger sans problème, j'ai été jusqu'à 63000 pour a$.

Alors ????
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Denis a écrit :Ha bon, j'ai cru que ton fichier faisait 30 Ko :roll:
Je pensais quand même que mon explication dans le premier post était claire :(

Surtout que pour tester, il suffit de prendre le fichier, de le renommer pour le cas ou il serait modifié, et de tester sur ce fichier.

N'importe quel fichier de plus de 64 Ko fait l'affaire.

Et windows n'est pas à un plantage près :)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ben pourquoi ça plante chez moi????

J'ai XP + SP2, 256 Mo Ram, PB 3.92
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je comprend de travers ce soir :roll:

MAis bon ton code fonctionne chez moi 8O
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Il faut peut être que tu libère la mémoire!

:)
Répondre