acces memoire invalide ...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
jerexgrz
Messages : 279
Inscription : dim. 05/juin/2005 20:27

acces memoire invalide ...

Message 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 .... :cry:
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: acces memoire invalide ...

Message 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
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
jerexgrz
Messages : 279
Inscription : dim. 05/juin/2005 20:27

Re: acces memoire invalide ...

Message par jerexgrz »

:P ok merci !
je vais faire d'autres essais.
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: acces memoire invalide ...

Message 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 "======"

@+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Répondre