[arch-general] gcc: loop do not terminate

Olivier Langlois olivier at olivierlanglois.net
Tue May 14 09:41:41 EDT 2013


On Tue, 2013-05-14 at 08:52 +0200, Martti Kühne wrote:
> Sorry if this is OT and a dumb question, but are you sure you want
> 
> On Mon, May 13, 2013 at 8:20 PM, LANGLOIS Olivier PIS -EXT
> <olivier.pis.langlois at transport.alstom.com> wrote:
> [...]
> > struct B
> > {
> >         int numelem;
> >         /*
> >          * Old C trick to define a dynamically sizable array just by allocating
> >          * sizeof(B) + (numelem-1)*sizeof(A) memory.
> >          */
> >         A   item[1];
> > };
> >
> 
> one item vs.
> 
That is a old C trick when STL container did not exist. The other
options would be to replace the 1 item array with pointer but then you
would have to do 2 malloc. 1 for struct B 1 for the array of A.

Maybe my usage of B array did obfuscate the pattern. An another way to
use it is:

B *p = (B *)malloc(sizeof(B) + (numelem-1)*sizeof(A));

That way you can define dynamically the say of the 'item' array. This
pattern dates back way before C99 standard which did, I think, introduce
dynamic array where you could write

B array[var];





More information about the arch-general mailing list