使用动态内存分配时是否必须单独分配结构成员?
Do structure members have to be separately allocated when using dynamic memory allocation?
我很难理解动态内存分配如何与结构一起工作。如果我有这样的结构:
struct mystruct
{
char *a;
int *b;
char *c;
};
如果我为结构动态分配内存,是否还必须为其中的 char*
分配内存?
是的,当您为结构分配 memory
时,只有 a
和 b
指针占用的 space 被分配。
对于你想要指针指向的内容,你需要再次调用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 *)
。
如果从字面上理解你的问题,你已经这样做了:
如果分配 space 来存储 mystruct
类型的对象,则为 all 成员分配 space,即使它们是指针.
如果有人预先假设你还没有像程序员那样思考,因此太草率了,答案可能是否定的:
您为指针分配了内存,而不是让它们指向。
如果您考虑一下,其他任何事情都会非常令人惊讶,并且需要编译器方面的大量预知和心灵感应能力;
指针应该指向什么?一个以 0 结尾的字符串?哪一个?长度为 MAGICCONSTANT
的缓冲区?为什么不在中间?
我很难理解动态内存分配如何与结构一起工作。如果我有这样的结构:
struct mystruct
{
char *a;
int *b;
char *c;
};
如果我为结构动态分配内存,是否还必须为其中的 char*
分配内存?
是的,当您为结构分配 memory
时,只有 a
和 b
指针占用的 space 被分配。
对于你想要指针指向的内容,你需要再次调用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 *)
。
如果从字面上理解你的问题,你已经这样做了:
如果分配 space 来存储
mystruct
类型的对象,则为 all 成员分配 space,即使它们是指针.如果有人预先假设你还没有像程序员那样思考,因此太草率了,答案可能是否定的:
您为指针分配了内存,而不是让它们指向。
如果您考虑一下,其他任何事情都会非常令人惊讶,并且需要编译器方面的大量预知和心灵感应能力;
指针应该指向什么?一个以 0 结尾的字符串?哪一个?长度为MAGICCONSTANT
的缓冲区?为什么不在中间?