Bonjour,
Je cherche une fonction équivalente au ReDim de VB
Merci
Bonjour,
Je cherche une fonction équivalente au ReDim de VB
Merci
je crois que tu dois utiliser les pointeurs, Getmem et sizeof...
fais un tour dans l'aide pour plus d'infos. revient si tu pige pas...
Bonjour !
Pour Windows et DPMI existent les fonctions GlobalReAlloc et GlobalReAllocPtr.
Mais pour DOS en mode réel :
- Solution de très loin la plus simple :
1. Utilise les routines d'allocation de variables dynamiques New ou GetMem pour allouer une variable de taille différente;
2. Transfère tes données vers la nouvelle variable;
3. Détruis l'ancienne variable.
- Solution "exotique" :
Il existe plus que certainement des gestionnaires du tas concurrents de ceux fournis avec Turbo Pascal - et plus puissants, avec notamment possibilité de redimensionner les variables dynamiques. Certains membres de ce forum en ont peut-être déjà programmé et ne manqueront pas de réagir...
Règles du forum
Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
Mes tutoriels et sources Pascal
Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]
Merci, l'histoire du GetMem est résolu.
J'ai vu aussi qu'on pouvait placer "preserve" juste aprés afin de ne pas modifier les valeurs antérieures du tableau. c bien ca?!
par quoi est-il remplacer en pascal. G cherché, mais je ne trouve pas !
Vu qu'en Pascal il ne s'agit pas de la modification de la taille d'une variable dynamique mais plutôt de la création d'une autre variable, ce genre de directive n'a pas lieu d'être. Il incombe au programme de transférer les données de l'ancienne vers la nouvelle variable.
Règles du forum
Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
Mes tutoriels et sources Pascal
Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]
Le gestionnaire de mémoire de Turbo Pascal est malheureusement un peu limité, car il n'inclus pas de possibilité de retailler une variable dynamique alors que le Dos le permet. C'est à n'y rien comprendre...
Plusieurs solutions sont à envisager.
1. Se débrouiller avec les moyens du bord
Pas le choix dans ce cas, créer une nouvelle variable, déplacer le contenu de l'ancienne dans celle-ci, et supprimer l'ancienne. C'est lent, peu pratique, et consomme deux fois plus de mémoire que nécessaire. Mais c'est simple à mettre en oeuvre.
2. On revient à la source : Dos
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 var A, B: Pointer; begin GetMem(A, 1000); { On alloue 1000 octets à A } ... { On veut passer de 1000 à 2000 octets } GetMem(B, 2000); { On alloue une nouvelle variable } Move(A^, B^, 1000); { On recopie l'ancienne variable } FreeMem(A, 1000); { On supprime l'ancienne } A := B; { Facultatif : on choisit de garder A comme variable } ... FreeMem(A, 2000); { Ou B, si on a échangé le rôle de A et B } end;
Le Dos permet de réallouer une variable. Ce n'est pas d'un pratique fou, car il faut réécrire toutes les procédures d'allocation mémoire, à l'aide de l'interruption 21h.
De plus, Turbo Pascal, par défaut, alloue toute la mémoire disponible pour son propre tas. Il faut donc limiter ses ardeurs avec la directive {$M Pile, TasMin, TasMax}
Je ne mets pas de code ici, il faut avoir un peu d'expérience en programmation système pour bien comprendre, et je ne susi pas sûr que ça serve vraiment.
3. On change totalement de stratégie
On utilise des listes chaînées à la place de tableaux par exemple. Les listes chaînées permettent de supprimer des élément et d'en rajouter autant que la mémoire le permet. Elles sont extrêment pratiques... une fois que l'on a su écrire le code les gérant !
Je t'engage alors à regarder l'unité Lists.pas...
A+
Remarque: Pour Windows et le mode protégé (DPMI), la réponse d'Alcatîz est nickel
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager