一个复杂的结构数组(动态生成),怎样赋值呢?
有一个结构定义如下:
struct feanode
{
char feaname[30];/* 每个特性的名称 */
int type;/* 每个特性的取值类型,0为字符型,1为整型,2为浮点型 */
union range/* 每个特性的取值范围 */
{
char *c_range[10]; /* 字符型 */
int i_range[10]; /* 整型 */
double d_range[10];/* 浮点型 */
}range;
int rangenum;/* 每个特性取值的数量 */
int indegree;/* 每个特性的入度 */
struct arcbox *parent , *child; /* 分别指向该顶点第一条入弧和出弧 */
}feanode;
在初始化函数中,要动态生成一个该结构的数组,共有5个该结构的元素。这5个结构元素的取值如下:
"duration ",1,{0,1},2,0,NULL,NULL
"protocol_type ",0,{ "icmp ", "tcp ", "udp "},3,0,NULL,NULL
"serror_rate ",2,{0.0,0.3,0.9},3,0,NULL,NULL
"srv_serror_rate ",2,{0.0,0.5,0.8},3,0,NULL,NULL
"urgent ",1,{5,8},2,0,NULL,NULL
初始化函数如下:
void init()
{
struct feanode *fealist;
fealist=(struct feanode *)malloc(5*sizeof(struct feanode));
assert(fealist!=NULL);
下面该怎样赋值呢?要求能够在不用的时候释放掉。
}
请教大家,多谢了!
[解决办法]
只能够一个成员一个成员的赋值,没别的好办法
看了一下你的代码,里面有union结构,你确定你知道union结构应该怎么使用吗?知道里面数据
成员的存储原理?如果不知道,建议你换用struct。
[解决办法]
其实可以这样:
struct feanode fealist[5] =
{
{ "duration ",1,{NULL},2,0,NULL,NULL},
{ "protocol_type ",0,{NULL},3,0,NULL,NULL},
{ "serror_rate ",2,{NULL},3,0,NULL,NULL},
{ "srv_serror_rate ",2,{NULL},3,0,NULL,NULL},
{ "urgent ",1,{NULL},2,0,NULL,NULL},
}, *pfealist= fealist;
由于是动态分配内存,所以无需考虑是否释放内存的问题
如果结构体是个const,建议定义成全局变量
上述赋值对union初始化为NULL,因为在上述初始化过程是无法对union进行类型判断去赋值的
所以union部分还是需要根据类型去逐个赋值!