如果我定义这样的结构:
struct mystruct
{
char *a;
int *b;
char *c;
}
然后这样做:
struct mystruct *test;
我基本上创建了一个指向我的结构的指针。我的问题是:如果我为50个结构分配内存,我是否还必须为结构内的char*
分配内存?
答案 0 :(得分:4)
如果从字面上理解你的问题,你已经这样做了:
如果您为mystruct
- 类型的对象分配空间,则为所有成员分配空间,即使它们是指针。
如果一个人预先认为你还没有像程序员一样思考,那么太过于草率,那么答案可能就是否定:
您为指针分配了内存,而不是指向它们。
如果您考虑一下,其他任何事情都会令人感到惊讶,并且需要编译器的大量预知和心灵感应能力;
指针指向什么?一个以0结尾的字符串?哪一个?长度为MAGICCONSTANT
的缓冲区?为什么不在一个中间呢?
答案 1 :(得分:1)
是的,当你为结构分配memory
时,只分配a
和b
指针所占用的空间。
对于您希望指针指向的内容,您需要再次调用malloc
,您应该执行类似
struct mystruct *test;
test = malloc(sizeof(*test)); // allocated space for 3 pointers.
if (test != NULL)
{
test->a = malloc(countOf_As);
test->b = malloc(countOf_As * sizeof(int));
test->c = malloc(countOf_Cs);
}
如果您想确定,请检查sizeof(struct mystruc)
它是3 * sizeof(void *)
。