c - C99 pointer to compound literal array of pointers -
note: actively fiddling on over ideone.
i have (self-referential) structure:
typedef struct t_function t_function; struct t_function { t_function * (* inhibits)[]; // pointer array of pointers structure };
and use compound literals target of inhibits
pointer. along lines of
t_function a, b, c; a.inhibits = & (<type>) {&b, &c};
this done follows looking understand type specification can use compound literals.
t_function a, b, c; t_function * ai[] = {&b, &c}; a.inhibits = &ai;
what appropriate type specification replace <type>
above?
a.inhibits
pointer subsequent memory locations forming pointer array. if want assign a.inhibits
, need array of pointers somewhere location store in a.inhibits
. why there no syntax &(...){&b, &c}
: can't right regardless of using ...
because there no actual array {&b, &c}
in memory.
in second example, allocating array of t_function *
pointers on stack. common programming error: a.inhibits
point location on stack, , current stack frame left, contents of a.inhibits
undefined. still worse, writing a.inhibits
cause undefined behavior.
you'll want use data structure of kind, answer question, simplest solution allocate array on heap:
#include <stdlib.h> typedef struct t_function t_function; struct t_function { t_function **inhibits; /* no [] */ };
…
t_function a, b, c; t_function **ai = calloc(2, sizeof(t_function *)); ai[0] = &b; ai[1] = &c; a.inhibits = ai;
just make sure free memory once don't need more.
Comments
Post a Comment