Page 1 sur 1

Comprend pas pourquoi "Invalid Memory access"

Publié : mer. 24/mars/2010 14:19
par GallyHC
Bonjour tout le monde,

Comme toujours j’aurais besoin de votre aide pour comprendre un problème. Tout d’abord le code avec la même version de pb fonctionne sans problème. Depuis peu et sa le fait et sa le fait plus, enfin y a une erreur qui n’est pas constante.

Dans une variable défini comme suit « Define ceosver.CEOSVERSIONINFO » je mets via la commande suivante des valeurs « CallFunction(#OPENLIB_0, "CeGetVersionEx", @ceosver) ». Quand je debug je vois bien les valeurs de cette variable (Image 1). Des que je revois les valeurs une erreur de mémoire invalide arrive et je ne comprends pas.

Voici le code qui me pause problème.

Code : Tout sélectionner

Procedure.s RAPIGetCEOSVersionString() 
; DONNE LA VERSION DU POCKET-PC.
  Define ceosver.CEOSVERSIONINFO

  ceosver\dwOSVersionInfoSize = SizeOf(ceosver)
  If CallFunction(#OPENLIB_0, "CeGetVersionEx", @ceosver)
    ProcedureReturn Str(ceosver\dwMajorVersion) + "." + Str(ceosver\dwMinorVersion) + "." + Str(ceosver\dwBuildNumber) + " " + ceosver\szCSDVersion
  EndIf

EndProcedure
Image
Image1

L’erreur exacte est « Invalid Memory access. (read error at adress 0). J’ai eu le même type d’erreur avec un simple « Global Dim ».

Merci d’avance a tous
GallyHC

Re: Comprend pas pourquoi "Invalid Memory access"

Publié : mer. 24/mars/2010 17:00
par G-Rom
Vite fait , essaye :
*ceosver.CEOSVERSIONINFO = allocatememory( sizeof( CEOSVERSIONINFO ) )
n'oublie pas le Freememory()

@+

Re: Comprend pas pourquoi "Invalid Memory access"

Publié : mer. 24/mars/2010 19:34
par GallyHC
Merci G-Rom pour cela mais impossible d'affecte dans une structure. Ce que je ne comprend pas c'est que sa fonctionne et que je n'ai rien modifier et je n'avais aucun problème avec l'ancienne version de PB aussi.

Amitie,
GallyHC

Re: Comprend pas pourquoi "Invalid Memory access"

Publié : mer. 24/mars/2010 23:16
par G-Rom

Code : Tout sélectionner

structure MyStruct
A.i
B.i
etc.s
*Ptr.i
endstructure


*MyVar.Mystruct = AllocateMemory(sizeof(Mystruct))

*MyVar\A = 50
*MyVar\B = 20
*MyVar\etc = "Cool"
*MyVar\Ptr = AllocateMemory(sizeof(MyStruct))


*MyVar2.Mystruct = *MyVar\Ptr
*MyVar2\A = 31
*MyVar2\B = 100
*MyVar2\etc = "Sympa!"
*MyVar2\Ptr = #NULL
N'oublie pas le * avant :wink:

Re: Comprend pas pourquoi "Invalid Memory access"

Publié : ven. 26/mars/2010 19:06
par GallyHC
Bonjour,

Encore merci je vais teste cela.

GallyHC

Re: Comprend pas pourquoi "Invalid Memory access"

Publié : lun. 29/mars/2010 14:05
par GallyHC
Bonjour,

Juste avec un simple "ReDim TomTom(0)", j'ai aussi la meme erreur...

La declaration

Code : Tout sélectionner

Structure tomtom
	devicetype.l
	devicename.s
	deviceversionhw.s
	deviceserialnumber.s
	applicationversion.s
	applicationbuildnumber.s
	bootloaderversion.s
	deviceuniqueid.s
	drive.s
	poi.s
	version.s
	currentmap.s
	card.s
	mail.s
	dateephem.l
EndStructure

Global Dim tomtom.tomtom(0)
Si quelqu'un a encore des idée sur le pourquoi de cela. et pareil pour pour l'autre code plus haut erreur non constante.

Cordialement,
GallyHC

Re: Comprend pas pourquoi "Invalid Memory access"

Publié : lun. 29/mars/2010 15:36
par Backup
GallyHC a écrit :

Code : Tout sélectionner

Global Dim tomtom.tomtom(0)

lorsque tu fait ça tu ne dimensionne pas , tu efface ! , tu supprime le tableau !!

la doc dit :
Pour effacer le contenu complet d'un tableau et libérer la mémoire qu'il occupe, appelez Dim avec 0 élément.
solution

fait :

Code : Tout sélectionner

Dim tomtom.tomtom(1)

Re: Comprend pas pourquoi "Invalid Memory access"

Publié : lun. 29/mars/2010 16:57
par GallyHC
Bonjour Dobro,

Bon quoi dire heu je vois pas :) Merci

Cordialement,
GallyHC

Re: Comprend pas pourquoi "Invalid Memory access"

Publié : lun. 29/mars/2010 17:01
par G-Rom
Si tu suis mon code , logiquement y a pas d'erreur possibles , sauf si la mémoire demandé n'est pas disponible.

Re: Comprend pas pourquoi "Invalid Memory access"

Publié : lun. 29/mars/2010 18:21
par GallyHC
Promis je vais suivre tes directives :)

Re: Comprend pas pourquoi "Invalid Memory access"

Publié : lun. 29/mars/2010 18:43
par djes
Avec PB il faut oublier tes réflexes de programmation objet. Tu ne gères pas des objets, mais des variables, qui sont en fait des espaces mémoires. Les objets sont comme des éléments de listes, alloués dynamiquement en fonction des besoins. Tu as vraiment le contrôle sur ce qui se passe, ce qui n'est pas le cas d'un objet, qui par définition "s'auto-gère" (construction, destruction, etc). En programmation structurée, c'est ton programme qui gère tout. Les variables ont un espace réservé une fois pour toutes à l'exécution (même si ton programme ne s'en sert pas!). Par contre, toutes les choses un peu dynamiques (listes chainées, chaines de caractères, tableaux) passent par des allocations de mémoire/libération, dont tu peux simuler (ou altérer mais ça c'est pour les experts) le comportement avec des pointeurs.

Re: Comprend pas pourquoi "Invalid Memory access"

Publié : mar. 30/mars/2010 18:48
par G-Rom
djes a écrit :Avec PB il faut oublier tes réflexes de programmation objet. Tu ne gères pas des objets, mais des variables, qui sont en fait des espaces mémoires. Les objets sont comme des éléments de listes, alloués dynamiquement en fonction des besoins. Tu as vraiment le contrôle sur ce qui se passe, ce qui n'est pas le cas d'un objet, qui par définition "s'auto-gère" (construction, destruction, etc). En programmation structurée, c'est ton programme qui gère tout. Les variables ont un espace réservé une fois pour toutes à l'exécution (même si ton programme ne s'en sert pas!). Par contre, toutes les choses un peu dynamiques (listes chainées, chaines de caractères, tableaux) passent par des allocations de mémoire/libération, dont tu peux simuler (ou altérer mais ça c'est pour les experts) le comportement avec des pointeurs.

Je comprends pas ton message ? il s'adresse à moi ?
si oui , dans le code du dessus , y a rien d'OO , c'est un concept complètement différent , c'est du code 100% purebasic , sans esbroufe , qui fonctionne. Pour les classes , ca dépends comment tu implémentes ton objet , l'allocation n'est pas forcement automatique , ca dépend de se que contient ta classe , ton constructeur ( qui est appelé automatiquement ) , et ton destructeur ( idem que le constructeur ) , la poo ne fait pas des miracles , mais donne une flexibilité énorme au code sans aucun doute.

Re: Comprend pas pourquoi "Invalid Memory access"

Publié : mar. 30/mars/2010 19:54
par djes
G-Rom a écrit :
djes a écrit :Avec PB il faut oublier tes réflexes de programmation objet. Tu ne gères pas des objets, mais des variables, qui sont en fait des espaces mémoires. Les objets sont comme des éléments de listes, alloués dynamiquement en fonction des besoins. Tu as vraiment le contrôle sur ce qui se passe, ce qui n'est pas le cas d'un objet, qui par définition "s'auto-gère" (construction, destruction, etc). En programmation structurée, c'est ton programme qui gère tout. Les variables ont un espace réservé une fois pour toutes à l'exécution (même si ton programme ne s'en sert pas!). Par contre, toutes les choses un peu dynamiques (listes chainées, chaines de caractères, tableaux) passent par des allocations de mémoire/libération, dont tu peux simuler (ou altérer mais ça c'est pour les experts) le comportement avec des pointeurs.

Je comprends pas ton message ? il s'adresse à moi ?
si oui , dans le code du dessus , y a rien d'OO , c'est un concept complètement différent , c'est du code 100% purebasic , sans esbroufe , qui fonctionne. Pour les classes , ca dépends comment tu implémentes ton objet , l'allocation n'est pas forcement automatique , ca dépend de se que contient ta classe , ton constructeur ( qui est appelé automatiquement ) , et ton destructeur ( idem que le constructeur ) , la poo ne fait pas des miracles , mais donne une flexibilité énorme au code sans aucun doute.
Non, c'est à GallyHC que je parlais