c - Is it legal to create a flexible array member of size zero? -


the c99 standard allows creation of flexible array members such as

typedef struct pstring {   size_t length;   char   string[]; } pstring; 

this initialized pstring* s = malloc(sizeof(pstring) + len). permissible len zero? seem consistent, , nice saving space time time (probably not pstring example, of course). on other hand, have no idea following code do:

pstring* s = malloc(sizeof(pstring)); s->string; 

this seems sort of thing might work 1 compiler , not another, or on 1 os , not another, or on 1 day , not another, want know standard says this. malloc in example code undefined behavior, or access s->string invalid, or else entirely?

what valid, accessing s->string[0] or feeding s->string function accessing data invalid.

the c99 standard says (§6.7.2.1):

struct s { int n; double d[]; };

...

struct s t1 = { 0 }; // valid

...

the assignment t1.d[0] undefined behavior, possible that

sizeof (struct s) >= offsetof(struct s, d) + sizeof (double)

in case assignment legitimate. nevertheless, cannot appear in strictly conforming code.


Comments

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -