使用动态内存分配时是否必须单独分配结构成员?

Do structure members have to be separately allocated when using dynamic memory allocation?

我很难理解动态内存分配如何与结构一起工作。如果我有这样的结构:

struct mystruct
{
    char *a;
    int  *b;
    char *c;
};

如果我为结构动态分配内存,是否还必须为其中的 char* 分配内存?

是的,当您为结构分配 memory 时,只有 ab 指针占用的 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 的缓冲区?为什么不在中间?