在C中,如何为结构分配空间?

时间:2016-06-06 05:28:04

标签: c struct dynamic-memory-allocation

我构建了一个函数,我试图用它为我的struct动态分配内存,就像这样。似乎无法让它发挥作用

typedef struct My_Struct
{
    char **array
}MyStruct

MyStruct * createMyStruct(int length)
{
     MyStruct->array = malloc(sizeof(char *) * (length + 1));   
}

int main(void)
{
     MyStruct *new1 = createMyStruct(10);
     return 0;
}

2 个答案:

答案 0 :(得分:1)

分配sizeof(MyStruct)并转换为MyStruct ptr:

很简单
MyStruct * createMyStruct(int length)
{
     MyStruct* s = malloc(sizeof(MyStruct));
     s->array = malloc(sizeof(char*) * (length + 1));   
     return s;
}

顺便说一句,通常结构中没有任何指针,但只有固定大小或至少char*[]而不是char*的数组,因为结构通常具有固定的大小更容易分配。 如果您使用我上面的代码,请不要忘记分配char* char**,因为我的代码中的malloc只分配指针而不是字符串本身

答案 1 :(得分:0)

您无法使用MyStruct类型初始化其字段,因为它们不是静态的。您必须首先创建struct实例,然后初始化它,然后从您的方法返回。

MyStruct * createMyStruct(int length)
{
    MyStruct* pResult = malloc(sizeof(MyStruct)); 
    pResult->array = malloc(sizeof(char *) * (length + 1));
    return(pResult);   
}

使用完毕后不要忘记释放内存。

PS: 这段代码也很奇怪:

pResult->array = malloc(sizeof(char *) * (length + 1));

如果您尝试初始化相同长度的字符串数组,则不正确。您将获得一个包含未初始化指针的length+1数组。如果您只是简单地分配一个数组以便稍后使用它 - 那么递增length可能是错误的。