Page 1 sur 2

...

Publié : jeu. 13/mai/2004 17:50
par Dr. Dri
...

Publié : jeu. 13/mai/2004 19:35
par Anonyme2
Peut-être de le redimensionner avec 0 élément

Dim a(15)


puis Dim a(0)

Publié : jeu. 13/mai/2004 20:12
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é ...

Publié : jeu. 13/mai/2004 20:16
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 !

Publié : jeu. 13/mai/2004 20:17
par Anonyme2
alors peut-être -1 8O

Publié : jeu. 13/mai/2004 20:55
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 :)

Publié : jeu. 13/mai/2004 21:14
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:

Publié : jeu. 13/mai/2004 21:24
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 :)

Publié : jeu. 13/mai/2004 21:27
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)

Publié : jeu. 13/mai/2004 21:37
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 ?

Publié : jeu. 13/mai/2004 21:42
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

Publié : jeu. 13/mai/2004 21:46
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é

Publié : jeu. 13/mai/2004 21:48
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é

Publié : jeu. 13/mai/2004 21:52
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)

Publié : jeu. 13/mai/2004 21:53
par nico
Tricheur!! :wink: