web-dev-qa-db-fra.com

Allouer de la 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 utiliserions

x=malloc(sizeof(int)*y);

Cependant, que dois-je utiliser pour une variable de structure? Je ne pense pas que ce soit possible

struct st x = malloc(sizeof(struct)); 

Est-ce que quelqu'un peut m'aider? Merci!

28
Blackbinary

Mon préféré:

#include <stdlib.h>

struct st *x = malloc(sizeof *x); 

Notez que:

  • x doit être un pointeur
  • aucun plâtre n'est requis
  • inclure un en-tête approprié
62
dirkgently

Vous ne faites pas tout à fait ça. struct st x Est une structure, pas un pointeur. C'est bien si vous voulez en allouer un sur la pile. Pour l'allocation sur le tas, struct st * x = malloc(sizeof(struct st));.

6
David Thornley

struct st* x = malloc( sizeof( struct st ));

4
Nikolai Fetissov

C'est exactement possible de le faire - et c'est la bonne façon

En supposant que vous vouliez taper

struct st *x = malloc(sizeof(struct st)); 

ps. Vous devez faire sizeof (struct) même lorsque vous connaissez la taille de tout le contenu car le compilateur peut remplir la structure afin que les membres soient alignés.

struct tm {
  int x;
  char y;
}

pourrait avoir une taille différente de

struct tm {
  char y;
  int x;
}
3
Martin Beckett

Cela devrait faire:

struct st *x = malloc(sizeof *x); 
2
codaddict

struct st *x = (struct st *)malloc(sizeof(struct st));

1
alemjerus