我构建了一个函数,我试图用它为我的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;
}
答案 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
可能是错误的。