Je dois sécuriser l'espace à l'avance suffisant pour jusqu'à 4k entrées totales réparties entre deux types différents, dans une proportion quelconque, puis le remplir avec des données. J'ai pensé que j'allouerais un espace suffisant pour 4k du type le plus grand, et je déciderais ensuite de le remplir avec des données de quel type il s'agit réellement. Je cours dans un problème où le compilateur me dit erreur (etoa: 1554): type (s) illégal (s): ptr-to-void '+' int.Comment conserver un type de zone de stockage global indépendant de C?
Dans ma fonction init, j'allouent quelque chose de l'espace comme celui-ci:
ser_dat_ch = calloc(LABEL_T_CNT,
(sizeof(mpls_vpws_t) > sizeof(mpls_vpls_t)
? sizeof(mpls_vpws_t)
: sizeof(mpls_vpls_t)));
où ser_dat_ch
est déclaré à la portée du fichier comme ceci:
static void *ser_dat_ch = NULL;
Quand je charge les données dans la structure, je voulait faire quelque chose comme
rv = switch_mpls_vpws_data_get(lab, (mpls_vpws_t*)&ser_dat_ch[lab]);
, mais c'est ce qui obtient le compi Ler aboyant à moi. Quel est le problème?
Comment "aucune allocation dynamique autorisée" n'est maillée avec 'calloc()'? – EOF
J'utilise 'calloc()' pour toute la zone au tout début (à l'intérieur de ma fonction 'init()') - ce qui est autorisé! – cerr
@cerr, mais 'calloc()' effectue une allocation dynamique. Cela nous laisse incertains de ce que vous entendez par "aucune allocation dynamique autorisée". –