0
在下面的代码中,我如何以及在哪里动态初始化类结构中的数组?例如,如果我将它改为double * var,malloc语句去哪儿?如何在“面向对象”C中动态初始化数组?
myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H
struct Class;
struct Class *new_class();
void class_function(struct Class*,double);
#endif
myclass.c
#include "myclass.h"
#include <stdlib.h>
struct Class {
double var;
};
struct Class *new_class()
{
return (struct Class *)malloc(sizeof(struct Class));
}
void class_function(struct Class *inst, double num)
{
inst->var = num;
}
的main.c
#include "myclass.h"
int main()
{
struct Class *c1 = new_class();
class_function(c1,0.15);
return 0;
}
我试图修改new_class功能类似
struct Class *new_class(int len)
{
Class c1 = (struct Class *)malloc(sizeof(struct Class));
c1.var = (double)malloc(len*sizeof(double));
return c1;
}
没有运气。我是否需要创建一个单独的函数进行分配?什么是完成这个最好的方法?谢谢。
在'new_class'中,你也应该检查第二个malloc返回值,然后检查'free(c1)'和'return NULL;'是否失败。如果它不在'new_class()'中完成,它需要在'new_class'之外完成,并且没有人会记得这样做。 – 2015-02-10 19:21:02
@BrianMcFarland @BrianMcFarland不一定是因为毕竟它总是可以检查'var'成员,尽管你的解决方案意味着在任何阶段没有'malloc'意味着'struct'不能被分配,所以我将使用它, 好点子。 – 2015-02-10 19:24:07
谢谢。当我试图返回结构的时候,我感到很蠢,因为函数的返回值显然是它的指针。 – user1801359 2015-02-10 19:25:54