Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
764 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Comment allouer de la mémoire pour un tableau (malloc)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment allouer de la mémoire pour un tableau (malloc)

n°1976894
david13250
Posté le 24-03-2010 à 16:11:46  profilanswer
 

Bonjour à tous,
 
Je voudrais, si possible que quelqu'un m'explique comment faire pour qu'un tableau ait un certain nombre de cases avec une certaine mémoire allouée avec l'instruction malloc et les pointeurs. Sachant que si je demande un certain nombre de cases; si ma fonction malloc en définit un nombre inférieur alors le tableau aura le nombre inférieur de cases données.
 
J'espère être clair dans mon explication. L'environnement est LabWindows.


Message édité par david13250 le 24-03-2010 à 16:20:36
mood
Publicité
Posté le 24-03-2010 à 16:11:46  profilanswer
 

n°1976924
Elmoricq
Modérateur
Posté le 24-03-2010 à 16:43:36  profilanswer
 

Un tableau de type t, c'est n * la taille de t.
Du coup :
t *tableau = malloc(n * sizeof t);


Message édité par Elmoricq le 24-03-2010 à 16:43:53
n°1976993
david13250
Posté le 24-03-2010 à 19:36:40  profilanswer
 

Merci pour ta réponse mais j'ai déja essayé cette solution et ça ne marche pas: sûrement un problème d'adresse mais je ne connais pas trop le fonctionnement de la fonction malloc hormis qu'elle alloue l'adresse du pointeur à une donnée si j'ai bien compris. Je pense qu'une explication s'impose si ça ne te dérange pas!? Peut être qu'avec realloc tu aurait une solution sinon je t'envois le code?

n°1977016
billgatesa​nonym
Posté le 24-03-2010 à 20:39:37  profilanswer
 

La fonction void *malloc (size_t size) alloue size octets, et renvoie un pointeur sur la mémoire allouée.
 
Voir http://fr.wikipedia.org/wiki/Malloc et http://www.linux-kheops.com/doc/ma [...] loc.3.html
 
La fonction realloc() n'est à utiliser qu'après avoir fait un malloc(), si l'on veut changer la tailler initialement allouée.
 
Malloc() alloue un espace à une seule dimension. Mais peut-être que vous voudriez l'utiliser pour un truc qui n'a pas qu'une dimension, par exemple si votre tableau a à la fois des lignes et des colonnes, ou si vos cases n'ont pas toutes la même taille. Dans ce cas, vous pouvez faire plusieurs malloc(), ou bien faire un seul malloc() mais en transformant votre truc pour qu'il n'ait qu'une dimension, par exemple pour un tableau avec des lignes et colonnes, faire une multiplication et une addition pour déterminer l'endroit de chaque cellule.
 
N.B. Pour des tailles de tableau inférieures à 100 ko, il est souvent plus pratique de faire une allocation sur la pile ou sur le tas plutôt que de s'embêter avec des malloc() et des free().

n°1977017
Elmoricq
Modérateur
Posté le 24-03-2010 à 20:40:35  profilanswer
 

Documentation complète de malloc() : "man malloc" en ligne de commande sur un unix, ou dans google.
 
Le principe : ça alloue une zone mémoire, et ça retourne l'adresse du début de cette zone mémoire, et NULL en cas d'échec. À toi de savoir jusqu'où ça va pour ne pas dépasser ce qui a été allouer, et à libérer la mémoire avec free() quand tu n'en as plus besoin.
La fonction malloc() ne fait pas grand chose de plus. Même pas une initialisation de la mémoire allouée.  
 
La fonction realloc(), quant à elle et comme son nom l'indique, permet d'agrandir une zone mémoire allouée, quitte à la déplacer si besoin. La fonction realloc() retourne la nouvelle adresse en cas de succès, et NULL en cas d'échec (dans cette dernière situation, l'ancienne zone mémoire reste toujours valide).

n°1977018
david13250
Posté le 24-03-2010 à 20:57:43  profilanswer
 

Ok, merci, je comprend mieux. Parce que dans les livres de c c'est plûtot succint. J'aurais maintenant une autre question car une fois que j'ai prévue une certaine place pour mon tableau comment est-il possible de remplir cet espace avec une partie du tableau créé au préalable sachant que cette partie à pour limite la mémoire allouée?? Merci d'avance!

n°1977021
Elmoricq
Modérateur
Posté le 24-03-2010 à 21:07:05  profilanswer
 

Pour reprendre l'exemple de mon premier post, tu accèdes à une "case" du tableau facilement avec "tableau[case]". Tant que case est < à n, tu es bon. À toi de conserver n et vérifier que les accès se font bien dans les limites que tu as définies à l'allocation de la mémoire.

 

En plus complet, la syntaxe "tableau[case]" est un raccourci pratique pour "tableau + (case * sizeof t)", c'est-à-dire "adresse de début + (nombre de cases  * taille d'une case)".

 

Après, les pointeurs offrent des possibilités plus étendues. Par exemple, tu peux faire des tableaux de pointeurs, c'est-à-dire un tableau d'adresses de zones mémoire. Ce qui revient à un tableau à 2 dimensions.
Tu peux ainsi ajouter autant de dimensions que tu le souhaites, en augmentant le nombre de couches de pointeurs. Mais, bon, en général mieux vaut se limiter à un faible nombre de couches, car le niveau de complexité augmente en proportion.


Message édité par Elmoricq le 24-03-2010 à 21:10:10
n°1977043
david13250
Posté le 24-03-2010 à 22:49:56  profilanswer
 

Merci pour toute ces explications!!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Comment allouer de la mémoire pour un tableau (malloc)

 

Sujets relatifs
VBA: combiner 2 tableaux excel pour avoir un troisième tableau completmemoire, variable et erreur de segmentation
Centrer tableau mais aligner texte à gauche[java] probleme de transfert de tableau de byte
Perl - Tableau associatif HashRemplir un tableau à plusieurs dimensions
Struts accéder à un tableau avec bean:writetableau html avec les servlet
Problème avec un tableauRemplir un tableau à partir d'un fichier
Plus de sujets relatifs à : Comment allouer de la mémoire pour un tableau (malloc)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR