我怎么能分配这个结构? (C)

时间:2014-02-27 16:13:38

标签: c struct malloc

我有这样定义的结构:

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));

然后进行所需的操作?

5 个答案:

答案 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.*/
}