;octet non signé :.a
;mot non signé :.u
;/////////////////// CPU ////////////////////////////////////////////
Global TAILLEMEMOIRE= 4096 ;$FFF
Global ADRESSEDEBUT = 512 ;$200
Structure CPUS
Array memoire.a(TAILLEMEMOIRE) ;declaration d'un tableau pour la mémoire de 4Ko
;Registres
Array V.a(16) ; 8bits
I.u ; 16 bits stocke une adresse memoire ou dessinateur
Array saut.u(16) ;//Pour gerer les sauts dans "memoire" 16 aux maximums
nbrsaut.a ;//stocke le nombre de sauts effectués pour ne pas dépasser 16
compteurJeu.a ;// Compteur pour la synchronisation
compteurSon.a ;// Compteur pour le son
pc.u ;//pour parcourir le tableau "memoire" "program counter" 16bits
EndStructure
Global cpu.CPUS ; //déclaration de notre CPU
Procedure initialiserCpu()
;//On initialise le tout
For i=1 To TAILLEMEMOIRE-1;
cpu\memoire(i)=0 ;ERREUR Index de tableau hors limites ! ! ! ?
Next i
For i=0 To 15
cpu\V(i)=0;
cpu\saut(i)=0;
Next i
cpu\pc=ADRESSEDEBUT;
cpu\nbrsaut=0;
cpu\compteurJeu=0;
cpu\compteurSon=0;
cpu\I=0;
EndProcedure
initialiserCpu()
End
J'ai une ERREUR Index de tableau hors limites quelque soit l'index
Par contre si je remplace la variable TAILLEMEMOIRE par la constante #TAILLEMEMOIRE (sans global), ça marche.
normalement et conformément aux objets dynamiques présents dans une structure, celle-ci doit d'abord être initialisée
Dans l'aide, rubrique "Compiler Functions"
Syntax : InitializeStructure(*Pointer, Structure)
Description :
InitializeStructure initialize the specified structured memory area. This is useful when the structure contains dynamic objects like array", list or map which have to be allocated internally by PureBasic. 'Structure' is the name of the structure which should be used to perform the initialization. There is no internal check to ensures than the structure match the memory area. This function is for advanced users only and should be used with care.
;octet non signé :.a
;mot non signé :.u
;/////////////////// CPU ////////////////////////////////////////////
Global TAILLEMEMOIRE= 4096 ;$FFF
Global ADRESSEDEBUT = 512 ;$200
Structure CPUS
;Array memoire.a(TAILLEMEMOIRE) ;declaration d'un tableau pour la mémoire de 4Ko
Array memoire.a(TAILLEMEMOIRE)
;Registres
Array V.a(16) ;8bits
I.u ; 16 bits stocke une adresse memoire ou dessinateur
Array saut.u(16) ;//Pour gerer les sauts dans "memoire" 16 aux maximums
nbrsaut.a ;//stocke le nombre de sauts effectués pour ne pas dépasser 16
compteurJeu.a ;// Compteur pour la synchronisation
compteurSon.a ;// Compteur pour le son
pc.u ;//pour parcourir le tableau "memoire" "program counter" 16bits
EndStructure
Procedure initialiserCpu()
;//On initialise le tout
*sCPU.CPUS = AllocateMemory(SizeOf(CPUS))
InitializeStructure(*sCPU, CPUS)
For i=0 To TAILLEMEMOIRE-1;
*sCPU\memoire(i) = 0
Next i
For i=0 To 15
*sCPU\V(i)=0;
*sCPU\saut(i)=0;
Next i
*sCPU\pc=ADRESSEDEBUT;
*sCPU\nbrsaut=0;
*sCPU\compteurJeu=0;
*sCPU\compteurSon=0;
*sCPU\I=0;
EndProcedure
initialiserCpu()
End
Mesa a écrit :J'ai une ERREUR Index de tableau hors limites quelque soit l'index
Par contre si je remplace la variable TAILLEMEMOIRE par la constante #TAILLEMEMOIRE (sans global), ça marche.
ça s'explique comment svp ?
Les structures sont définies au «moment de la compilation». Le TAILLEMEMOIRE variable n'est pas définie au moment de la compilation, il ne reçoit pas une valeur jusqu'à ce que «l'exécution». TAILLEMEMOIRE # est défini à moment de la compilation. Ce pourquoi il travaille avec # TAILLEMEMOIRE et non TAILLEMEMOIRE.
Arf, j'ai réfléchi (le soir j'ai plus de mal )
C'est exactement ce que dit Demivec, la valeur doit être définie, tu n'as pas le choix
Si tu désire avoir une longueur différente et modifiable dans ton programme utilise plutôt une "List" ou une "Map"
;octet non signé :.a
;mot non signé :.u
;/////////////////// CPU ////////////////////////////////////////////
Global TAILLEMEMOIRE= 4096 ;$FFF
Global ADRESSEDEBUT = 512 ;$200
Structure CPUS
Array memoire.a(0) ;declaration d'un tableau pour la mémoire de 4Ko
;Registres
Array V.a(16) ; 8bits
I.u ; 16 bits stocke une adresse memoire ou dessinateur
Array saut.u(16) ;//Pour gerer les sauts dans "memoire" 16 aux maximums
nbrsaut.a ;//stocke le nombre de sauts effectués pour ne pas dépasser 16
compteurJeu.a ;// Compteur pour la synchronisation
compteurSon.a ;// Compteur pour le son
pc.u ;//pour parcourir le tableau "memoire" "program counter" 16bits
EndStructure
Global cpu.CPUS ; //déclaration de notre CPU
Procedure initialiserCpu()
;//On initialise le tout
ReDim cpu\memoire.a(TAILLEMEMOIRE)
For i=1 To TAILLEMEMOIRE-1;
cpu\memoire(i)=0 ;ERREUR Index de tableau hors limites ! ! ! ?
Next i
For i=0 To 15
cpu\V(i)=0;
cpu\saut(i)=0;
Next i
cpu\pc=ADRESSEDEBUT;
cpu\nbrsaut=0;
cpu\compteurJeu=0;
cpu\compteurSon=0;
cpu\I=0;
EndProcedure
initialiserCpu()
End
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.