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++
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
