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
Read-Only
Author Øyvind Kaurstad
Posted 27-Apr-2012 18:40 GMT
Toolset ARM
RE: An error in allocation
Øyvind Kaurstad
What is the problem, exactly? To get good answers you need to ask
good questions, and you haven't even specified if this is a compiler
problem (i.e does the compiler give you errors?) or a runtime problem
(i.e, the code doesn't do what you want).
That said, your code doesn't make much sense. I'm guessing that
you want to have one copy of the struct, and then allocate memory for
100 pointers to char, which is then to be assigned to the member
Pointers of said struct. Instead, you're allocating memory for 100
pointers to char and one long.
Please describe what it is you want to achieve, and then you might
get some sensible help.
Regards
-Øyvind
Read-Only
Author H Matherson
Posted 27-Apr-2012 19:54 GMT
Toolset ARM
RE: An error in allocation
H Matherson
What we're trying to do is new the object whats got the number of
objects and the array just like C++. It compiles great. But when we
run it we get errors. For some strange unexplicable reason the last
pointer is not always kept on and we dont know why.
Read-Only
Author Per Westermark
Posted 28-Apr-2012 01:33 GMT
Toolset ARM
RE: An error in allocation
Per Westermark
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.
Read-Only
Author Reluctant Consultant
Posted 28-Apr-2012 06:43 GMT
Toolset ARM
No tricks required
Reluctant Consultant
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.
This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.
ARM websites use two types of cookie: (1) those that enable the site to function and perform as required; and (2) analytical cookies which anonymously track visitors only while using the site. If you are not happy with this use of these cookies please review our Privacy Policy to learn how they can be disabled. By disabling cookies some features of the site will not work.