Comprend pas pourquoi "Invalid Memory access"

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Comprend pas pourquoi "Invalid Memory access"

Message 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
Dernière modification par GallyHC le dim. 28/mars/2010 13:17, modifié 1 fois.
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Comprend pas pourquoi "Invalid Memory access"

Message par G-Rom »

Vite fait , essaye :
*ceosver.CEOSVERSIONINFO = allocatememory( sizeof( CEOSVERSIONINFO ) )
n'oublie pas le Freememory()

@+
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Comprend pas pourquoi "Invalid Memory access"

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Comprend pas pourquoi "Invalid Memory access"

Message 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:
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Comprend pas pourquoi "Invalid Memory access"

Message par GallyHC »

Bonjour,

Encore merci je vais teste cela.

GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Comprend pas pourquoi "Invalid Memory access"

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Comprend pas pourquoi "Invalid Memory access"

Message 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)
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Comprend pas pourquoi "Invalid Memory access"

Message par GallyHC »

Bonjour Dobro,

Bon quoi dire heu je vois pas :) Merci

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Comprend pas pourquoi "Invalid Memory access"

Message 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.
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Comprend pas pourquoi "Invalid Memory access"

Message par GallyHC »

Promis je vais suivre tes directives :)
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Comprend pas pourquoi "Invalid Memory access"

Message 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.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Comprend pas pourquoi "Invalid Memory access"

Message 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.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Comprend pas pourquoi "Invalid Memory access"

Message 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
Répondre