gpt4 book ai didi

c - 为已分配的结构成员分配内存有什么好处?

转载 作者:行者123 更新时间:2023-11-30 18:53:36 25 4
gpt4 key购买 nike

我的问题类似于this 。想象一下这个结构:

  typedef struct {
char *chromosome,*sequence;
int start,end;
} localisation_t;

我想为此结构的数组(5 个元素)分配内存。我会尝试这样的事情:(语法肯定是错误的,因为你可以假设我对 C 不太流利)。

localisation_t *locs = (localisation_t*) calloc(5, sizeof(localisation_t));
strArray[0] = (localisation_t* ) malloc(sizeof(localisation_t));

我经常看到结构成员也可以分配内存。我不明白为什么,因为您已经为结构分配了内存?!但好吧,你不知道它会包含什么。 ( here 名称变量成员上带有 strdup 的示例)。为结构体成员分配内存(主要是当它是 char * 类型时)是一个好习惯吗?

如果我不这样做会发生什么?这是一个好的做法吗?

最佳答案

我假设您问是否还需要为 chromosome 分配内存和sequence指向。

答案是:这取决于情况。您可以将它们设置为指向字符串文字或其他数组,因此在这些情况下您不必分配任何额外的内存。但是,如果 localisation_t 的每个实例应该有它自己的 chromosome唯一实例和sequence ,那么是的,您还需要为它们分配内存:

char seq[] = "CGCTATCCC";
localisation_t *locs = calloc( 5, sizeof *locs );
...
locs[0].sequence = "CGCTATCCC"; // set sequence to point to string literal
locs[1].sequence = seq; // set sequence to point to another array
locs[2].sequence = strdup( "GGCCGGTT" ); // allocate memory for a duplicate string,
// set sequence to point to it

locs[3].sequence = malloc( strlen( "GGCCGGTT" ) + 1 ); // same as above, assumes
locs[3].sequence = strcpy( "GGCCGGTT" ); // strdup isn't available

...

free( locs[3].sequence );
free( locs[2].sequence );
/**
* Don't need to free locs[1].sequence or locs[0].sequence, since they
* point to objects that were not allocated using malloc or calloc
*/
free( locs );

关于c - 为已分配的结构成员分配内存有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32654512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com