我有这样定义的结构:
typedef struct _rule {
char * patr_ent[100];
int num_patr_ent;
char * plan_sal[100];
int num_plan_sal;
int ult;
} Rule;
一个由一系列规则组成的变量:
Rule list_of_rules[100];
我想要做的只是:为list_of_rules的一个“规则”分配内存 - >修改此规则的属性(打印扫描无论如何) - >分配给下一个规则等...
我应该这样做吗?
Rule* list_of_rules; /* instead of Rule list_of_rules[100] */
并分配:
list_of_rules[0] = malloc (sizeof(struct _rule));
然后进行所需的操作?
答案 0 :(得分:1)
在C
中,如果您编写Rule list_of_rules[100];
,则会为每个Rule
分配内存。
如果首先不知道Rule
的数量:
Rule* list_of_rules;
int total=250;
list_of_rules=malloc (sizeof(struct _rule)*total);
答案 1 :(得分:0)
你的初步建议还可以:
Rule list_of_rules[100];
如上所述,你的记忆已经分配。
如果你想使用malloc:
,你也可以这样做Rule * list_of_rules = malloc(100*sizeof(Rule));
编辑:考虑到您的评论,我想您想要这样的内容:
Rule * list_of_rules[100]; // List of POINTERS on Rule
for(unsigned int i=0; i<100; i++)
{
list_of_rules[i] = malloc(sizeof(Rule));
}
答案 2 :(得分:0)
为什么不选择malloc只有一个结构,然后使用realloc你需要增加list_of_rules的大小,如果你想要一个动态mem? (抱歉,我无法在第一个答案中添加评论)
EDIT 我认为你可以做到这一点:
Rule* list_of_rules[100]; //Or any size needed
list_of_rules = (Rule**) malloc( 100*sizeof(Rule*) );
for(unsigned int i=0; i<100; ++i)
{
list_of_rules[i] = (Rule*) malloc ( sizeof(Rule)) ;
}
答案 3 :(得分:0)
此代码没问题:
Rule *list_of_rules = (Rule *)malloc(sizeof(Rule) * 100);
希望这可以帮到你。
答案 4 :(得分:0)
之前由@ Rikayan-Bandyopadhyay回复
在C中,如果编写规则list_of_rules [100];,则为每个规则分配内存。
但是对于你要求的动态内存分配你可以使用realloc()来分配(增加当前分配的)内存,如
Rule* list_of_rules=NULL;
int ruleCounter=1;
/*For further dynamic allocation realloc can be used*/
while(<conditon to stop allocation>){
list_of_rules= (Rule *)realloc(sizeof(Rule)*ruleCounter);
/*list_of_rules[ruleCounter-1] is the new rule added dynamically.*/
}