Sujets variés concernant le développement en PureBasic
threedslider
Messages : 455 Inscription : dim. 01/juil./2018 22:38
Message
par threedslider » mar. 24/janv./2023 10:10
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.
case
Messages : 1546 Inscription : lun. 10/sept./2007 11:13
Message
par case » mar. 24/janv./2023 11:29
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)
threedslider
Messages : 455 Inscription : dim. 01/juil./2018 22:38
Message
par threedslider » mar. 24/janv./2023 16:46
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 !
Mesa
Messages : 1126 Inscription : mer. 14/sept./2011 16:59
Message
par Mesa » mer. 25/janv./2023 9:31
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.
Mesa
Messages : 1126 Inscription : mer. 14/sept./2011 16:59
Message
par Mesa » mer. 25/janv./2023 9:37
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)
threedslider
Messages : 455 Inscription : dim. 01/juil./2018 22:38
Message
par threedslider » jeu. 26/janv./2023 12:05
Ah c'est ça que je voulais, merci encore à Mesa pour tes exemples