We have an issue with this code
struct foo { int NumberOfPointers; char *Pointers[1]; } xx; // Allocate A Block Of Pool With Room For 100 Pointers myHunkyStuff = malloc( sizeof(long) + 100 * sizeof (char *) );
Can anyone explain?
The H Matherson Crew
If you wanted to make sure you really did get the memory you needed you should to a slight over-allocation - don't try to figure out the size of the other elements in the struct and their offsets etc. Allocate sizeof(struct) + x*sizeof(ptr). Then you do know that you have got a pointer to a block large enough, without having involved any tricks.
Apart for an obvious error/typo in the code, the task itself is straightforward:
struct foo { int NumberOfPointers; char *Pointers[1]; } xx; // Allocate A Block Of Pool With Room For 100 Pointers myHunkyStuff = malloc( sizeof(xx) + (100-1)*sizeof (char *) );
You want the size of the overall structure (along with any padding that might be present between NumOfPointers and Pointers) plus an array of the 'extra to the one already in' the structure.