This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

An error in allocation

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

Parents
  • 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.

Reply
  • 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.

Children
  • 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.