整体结构内存分配

时间:2015-01-09 22:56:00

标签: c memory-management data-structures

如果我定义这样的结构:

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

然后这样做:

struct mystruct *test;

我基本上创建了一个指向我的结构的指针。我的问题是:如果我为50个结构分配内存,我是否还必须为结构内的char*分配内存?

2 个答案:

答案 0 :(得分:4)

  • 如果从字面上理解你的问题,你已经这样做了:

    如果您为mystruct - 类型的对象分配空间,则为所有成员分配空间,即使它们是指针

  • 如果一个人预先认为你还没有像程序员一样思考,那么太过于草率,那么答案可能就是否定:

    您为指针分配了内存,而不是指向它们。

    如果您考虑一下,其他任何事情都会令人感到惊讶,并且需要编译器的大量预知和心灵感应能力;
    指针指向什么?一个以0结尾的字符串?哪一个?长度为MAGICCONSTANT的缓冲区?为什么不在一个中间呢?

答案 1 :(得分:1)

是的,当你为结构分配memory时,只分配ab指针所占用的空间。

对于您希望指针指向的内容,您需要再次调用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 *)