Page 1 sur 1

Accès mémoire invalide

Publié : mar. 24/janv./2023 10:10
par threedslider
Hello à tous,

Dis, si je fais cela :

Code : Tout sélectionner

Structure test
  x.f
  y.f
EndStructure

a.test\x = 30.0

Debug a\x

Structure v_test
  Array values.test(1)
EndStructure

Define val.v_test

val\values(0)\x = 100.5
val\values(1)\x = 50.5

Debug val\values(0)\x 
Debug val\values(1)\x
jusque là ça marche mais par contre pourquoi ceci ne fonctionne pas ???

voici le code :

Code : Tout sélectionner

Define *pointer.v_test

*pointer\values(0)\x = 3000.0

Debug *pointer\values(0)\x
PB me dit : Accès mémoire invalide( erreur lecture à l'adresse 0)

Pourriez vous m'expliquer du pourquoi et du comment faire fixer cet message d'erreur ? Merci.

Re: Accès mémoire invalide

Publié : mar. 24/janv./2023 11:29
par case
un pointer n'est pas une variable. mais pointe vers une adresse mémoire.
comme l'indique la doc
Il existe seulement trois méthodes valides pour fixer la valeur d'un pointeur:
- Obtenir le résultat par une fonction (voir l'exemple ci-dessous)
- Copier la valeur d'un autre pointeur
- Trouver l'adresse d'une variable, procédure ou label (voir ci-dessous)

Re: Accès mémoire invalide

Publié : mar. 24/janv./2023 16:46
par threedslider
Merci case ! Ok j'ai lu également la doc pour ça :)

C'est tout bête, il fallait ça :

Code : Tout sélectionner

Define val.v_test

*pointer.v_test = @val

*pointer\values(0)\x = 30.0

Debug val\values(0)\x
Et là ça marche !!! Trop bizarre quand même pour PB, moi qui je suis habitué au C++ :P

Hapyy coding !

Re: Accès mémoire invalide

Publié : mer. 25/janv./2023 9:31
par Mesa
Il faut initialiser les structures dans ce cas là.

Code : Tout sélectionner

Structure TEST
	x.f
	y.f
EndStructure

a.TEST\x = 30.0

; Debug a\x

Structure v_test
	Array values.test(1)
EndStructure

Define val.v_test

val\values(0)\x = 100.5
val\values(1)\x = 50.5

; Debug val\values(0)\x 
; Debug val\values(1)\x

Define *pointer.v_test
*pointer= AllocateMemory(SizeOf(v_test))
InitializeStructure(*pointer, v_test)

*pointer\values(0)\x = 3000.0

Debug *pointer\values(0)\x
M.

Re: Accès mémoire invalide

Publié : mer. 25/janv./2023 9:37
par Mesa
On peut utiliser "allocatestructure()" aussi (c'est préférable).

Ne pas oublier d'utiliser freestructure() dans tous les cas.

Code : Tout sélectionner

Structure TEST
	x.f
	y.f
EndStructure

a.TEST\x = 30.0

; Debug a\x

Structure v_test
	Array values.test(1)
EndStructure

Define val.v_test

val\values(0)\x = 100.5
val\values(1)\x = 50.5

; Debug val\values(0)\x 
; Debug val\values(1)\x




; Define *pointer.v_test
; *pointer= AllocateMemory(SizeOf(v_test))
; InitializeStructure(*pointer, v_test)


*pointer.v_test = AllocateStructure(v_test)

*pointer\values(0)\x = 3000.0

Debug *pointer\values(0)\x

FreeStructure(*pointer)

Re: Accès mémoire invalide

Publié : jeu. 26/janv./2023 12:05
par threedslider
Ah c'est ça que je voulais, merci encore à Mesa pour tes exemples :)