Page 1 sur 1
acces memoire invalide ...
Publié : ven. 08/oct./2010 15:41
par jerexgrz
Code : Tout sélectionner
Structure type_objet_tmp
quan.l
energie.l
couleur.l
interet.s
secret.s
ligne.l
dernier.l
sens.s
cibx.l
ciby.l
cibz.l
production.s
reorganiser.l
recherche.l
mvt.s
Array file_prod.s (11)
EndStructure
Global ff.type_objet_tmp
Global tt.type_objet_tmp
ff\file_prod(1) = "10"
tt\file_prod(8) = "unite"
Procedure ver()
Debug ff\file_prod (1)
ff\file_prod(1) = tt\file_prod(8)
ClearStructure(@ff,type_objet_tmp) ;si on remplace @ff par @ff1 on a une remarque mais elle n'est pas assez explicite !
;ff.type_objet_tmp
;ff\file_prod (1) = "unite speciale"
EndProcedure
ver()
;Global ff.type_objet_tmp
ff\file_prod (1) = "unite speciale"
Debug ff\file_prod(1)
Debug tt\file_prod(8)
Debug "======"
J'ai un joli message d'erreur quand je lance ce petit prog ! J'ai fait quelques tests avec les lignes en remarques mais je n'arrive plus à utiliser la variable ff\file_prod ....

Re: acces memoire invalide ...
Publié : ven. 08/oct./2010 22:49
par PAPIPP
Bonjour jerexgrz
Le Pb vient de Clearstructure car cette instruction vide la structure complètement
la taille de la zone array ff\file_prod(11) devient après cette instruction ff\file_prod() cette zone est sans dimension d'où l'erreur.
Il faut éviter d'utiliser cette instruction avec des tableaux définis avec ARRAY.
Et Il existe d'autres possibilités pour définir des tableaux.
Syntax
Resultat = ClearStructure(*Pointeur, Structure)
Description
ClearStructure vide la zone mémoire structurée et met la valeur de tous les champs à zéro. C'est particulièrement utile quand la structure contient des chaînes de caractères qui ont été allouées en interne par PureBasic. 'Structure' est le nom de la structure qui sera utilisée pour effectuer le nettoyage. Il n'y a pas de contrôle pour s'assurer que la zone mémoire est bien du type 'Structure' spécifié, donc il est impératif de manipuler cette commande avec précaution.
Exemple:
Structure People
Name$
LastName$
Age.l
EndStructure
Student.People\Name$ = "Paul"
Student\LastName$ = "Morito"
Student\Age = 10
ClearStructure(@Student, People)
; Affichera des chaines vide, car la structure entiere a ete videe. Tous les autres champs ont ete remis a zero
;
Debug Student\Name$
Debug Student\LastName$
Debug Student\Age
Re: acces memoire invalide ...
Publié : dim. 10/oct./2010 18:33
par jerexgrz

ok merci !
je vais faire d'autres essais.
Re: acces memoire invalide ...
Publié : dim. 12/déc./2010 22:40
par PAPIPP
Bonjour à tous.
La dimension a été effacée, mais on peut la rétablir comme ci-dessous.
Code : Tout sélectionner
Structure type_objet_tmp
quan.l
energie.l
couleur.l
interet.s
secret.s
ligne.l
dernier.l
sens.s
cibx.l
ciby.l
cibz.l
production.s
reorganiser.l
recherche.l
mvt.s
Array file_prod.s(11)
EndStructure
Global ff.type_objet_tmp
Global tt.type_objet_tmp
ff\file_prod(1)="10"
tt\file_prod(8)="unite"
Procedure ver()
Debug ff\file_prod(1)
ff\file_prod(1)=tt\file_prod(8)
ClearStructure(@ff,type_objet_tmp) ;si on remplace @ff par @ff1 on a une remarque mais elle n'est pas assez explicite !
;ff.type_objet_tmp
;ff\file_prod (1) = "unite speciale"
EndProcedure
Debug ff\file_prod(1)
Debug tt\file_prod(8)
ver()
Dim tt\file_prod(12)
Dim ff\file_prod(12)
Debug "======"
;Global ff.type_objet_tmp
ff\file_prod(1)="1230"
tt\file_prod(8)="C'est bon"
Debug ff\file_prod(1)
Debug tt\file_prod(8)
Debug "======"
@+