L'allocation de mémoire pour une Structure en C
Je suis chargé de créer un programme qui alloue dynamiquement de la mémoire pour une structure.
normalement, nous aurions utilisation
x=malloc(sizeof(int)*y);
Cependant, que dois-je utiliser pour une variable de structure?
Je ne pense pas que c'est possible de faire
struct st x = malloc(sizeof(struct));
Quelqu'un pourrait-il m'aider?
Merci!
- en cas de doute, essayez-la!
- On y est presque. La syntaxe correcte est
malloc(sizeof(struct st))
. Bien sûrsizeof *x
indiqué ci-dessous est préféré. - +1 de moi...bonne question et utile pour un débutant!
Vous devez vous connecter pour publier un commentaire.
Mon préféré:
Noter que:
x
doit être un pointeurx
être un pointeur.struct
nom sur les RHS beaucoup plus. Une autre contre-point: à lire mon premier élément de liste à puces ou David Thornley commentaire.Que vous n'êtes pas en train de le faire.
struct st x
est une structure, et non pas un pointeur. C'est bien si vous voulez allouer sur la pile. Pour l'allocation sur le tas,struct st * x = malloc(sizeof(struct st));
.struct st* x = malloc( sizeof( struct st ));
C'est exactement possible à faire, et qui est la façon correcte
En supposant que vous vouliez type
ps. Que vous avez à faire sizeof(struct) même lorsque vous savez que la taille de tous les le contenu, car le compilateur ne peut combler la structure de sorte que les cadres sont alignés.
peut avoir une taille différente pour
sizeof(struct)
n'est pas légal.sizeof(struct st)
est.struct st *x = malloc(sizeof(struct st));
struct lui-même n'est pas réellement avoir une taille.struct st
oustruct tm
? 🙂Cela devrait le faire:
struct st *x = (struct st *)malloc(sizeof(struct st));
malloc()
: 1. Il n'est pas nécessaire (C void* est différente de celle de C++ void*), 2. Non comme des outils d'analyse pourrait détecter donnant malloc() de la bonne taille, et 3. y compris le bon en-tête de donner le compilateur le droit des astuces que vous voulez dire la système malloc, ce qui peut produire un meilleur code.Je crois, lorsque vous appelez
sizeof
sur unstruct
type, C appelle de manière récursive sizeof sur les champs de lastruct
. Donc,struct st *x = malloc(sizeof(struct st));
ne fonctionne vraiment sistruct st
a une taille fixe. Ce n'est significative que si vous avez quelque chose comme un de taille variable chaîne de caractères dans votre structure et vous NE voulez PAS lui donner le maximum à chaque fois.En général,
œuvres. Occasionnellement, vous allez courir dans les structures de taille variable ou "abstrait" des structures (pensez: classe abstraite Java) et le compilateur va vous dire qu'il ne peut pas déterminer la taille de la structure st. Dans ces cas, vous devrez calculer la taille de la main et appeler malloc avec un numéro, ou vous trouverez une fonction qui retourne un pleinement mis en œuvre et le malloc avais la version de la structure que vous souhaitez.