...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

...

Message par Dr. Dri »

...
Dernière modification par Dr. Dri le lun. 10/oct./2005 9:24, modifié 1 fois.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Peut-être de le redimensionner avec 0 élément

Dim a(15)


puis Dim a(0)
LavaLava
Messages : 173
Inscription : dim. 28/mars/2004 17:42
Localisation : Provence

Message par LavaLava »

Non, cela ne marche pas (tout à fait) car
dim a(0)
définit un tableau a 1 élément le a(0).
La fonction UnDim pourrait donc avoir une utilité ...
LavaLava
Messages : 173
Inscription : dim. 28/mars/2004 17:42
Localisation : Provence

Message par LavaLava »

J'avais oublié ...
la doc francaise n'explique pas la valeur de dimensionnement, alors que celle anglaise le fait.
Dim toto(x)
dimensionne un tableau à x+1 élements.
Le 0 compte !
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

alors peut-être -1 8O
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

FreeMemory(*MemoryID)
Description

Libère une zone mémoire précédemment allouée par la fonction AllocateMemory() ou ReAllocateMemory(). Si la valeur de *MemoryID est -1, alors toutes les zones mémoire actuellement allouées seront libérées.
Est-ce qu'un tableau est concerné par ça ? ou seulement AllocateMemory() ? Aucune idée !
Je dirais seulement AllocateMemory(), mais bon , attendons le retour de vacances de Fred pour en savoir plus :)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

ma doc anglaise dit :
Arrays are always globally accessable in PureBasic. This means that they can always be accessed from inside procedures without needing to use the Global or Shared commands.

If you want to delete the content of an array and release its used memory during program flow, call Dim with array name and 0 elements.
donc en gros toto(0) libère toute la mémoire allouée par le tableau :wink:
Image
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

et bien voila , le mystère est résolu :)

J'étais sur le point de mettre en place une commission d'enquête sur la mémoire disparue .

y'a pas à dire , elle recèle encore quelques secrets cette doc anglaise :)
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

tu peut la metre en place ta commission d'enquete, car ça ne marche pas :roll:

Code : Tout sélectionner

Dim tab(10)
tab(0) = 1002
Debug tab(0)
Dim tab(0)
Debug tab(0)
LavaLava
Messages : 173
Inscription : dim. 28/mars/2004 17:42
Localisation : Provence

Message par LavaLava »

Au secours !!!!
Ma doc ne dit rien à ce sujet et lors de mon dernier post j'avais testé ça :

Code : Tout sélectionner

Dim a(0)
a(0)=10
Debug a(0)
Et no problémo ! Ca affiche '10' !
Que fais la police des 'aides' ?

Yatil un lien pour recupérer les fichiers aide Fr et Anglais les plus mieux à jour du monde ?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

la doc anglaise dit ca aussi :
When you define a new array, please note that it will have one more element than you used as parameter, because the numbering of the elements in PureBasic (like in other BASIC's) starts at element 0. For example when you define Dim(10) the array will have 11 elements, elements 0 to 10. This behaviour is different for static arrays in structures.
donc oui c normal
un tableau se dimensionne avec n-1 éléments, donc 0 élément = 1 élément.
ca parrait logique, c'est le cas dans des milliers d'autres situations en informatique
Dernière modification par Flype le jeu. 13/mai/2004 21:48, modifié 1 fois.
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

la mémoire est bien libérée à l'exception du premier element
histoire d'avoir encore accès au tableau

Code : Tout sélectionner

Dim a(1)
a(0)=100
a(1)=1000

Dim a(0)
Debug a(0) ; la ok
Debug a(1) ; là çà plante si debugger off comme dit ds la doc
           ; normal car le tableau a bien été redimensionné
Image
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

cederavic a écrit :tu peut la metre en place ta commission d'enquete, car ça ne marche pas :roll:
:P


Flype , le tableau est redimensionné mais la mémoire n'est pas vidée ?

Code : Tout sélectionner

Dim a(1) 
a(0)=100 
a(1)=1000 

Dim a(0) 
Debug a(0) ; la ok 
Debug PeekL(@a(0)+4) ; affiche toujours la valeur a(1)
Debug a(1) ; là çà plante si debugger off comme dit ds la doc 
           ; normal car le tableau a bien été redimensionné
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

pour liberer completement le tableau, il suffit de faire :

Code : Tout sélectionner

Dim toto(100)

Procedure DimFree()
  
  Dim toto(0)
  toto(0) = #Null
  
EndProcedure

toto(0) = 111
toto(1) = 222
toto(2) = 333

DimFree()

Debug toto(0)
Image
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Tricheur!! :wink:
Répondre