如何使用malloc为结构数组分配空间?

时间:2015-04-20 05:12:51

标签: c arrays struct malloc realloc

我正在努力动态分配我的结构数组,我不确定如何继续。这是我的结构:

struct Word_setup 
{
    char word[M];
    int count;
} phrase[N];

我知道malloc返回一个指向内存块的指针,但是我不确定它在结构数组中是如何工作的。
如果有人可以请澄清,将非常感谢!

2 个答案:

答案 0 :(得分:1)

可能你的意思是:

struct Word_setup {
    char word[M];
    int count;
};

最好避免在与结构定义相同的行中定义变量,以帮助提高代码的可读性。

然后你可以分配这些数组:

int main()
{
    struct Word_setup *phrase = malloc(N * sizeof *phrase);

    // use phrases[x] where 0 <= x < N

    phrase = realloc(phrase, (N+5) * sizeof *phrase);

    // now can go up to phrases[N+4]

    free(phrase);
}

当然,如果mallocrealloc返回NULL,您应检查失败并中止该计划。


如果你还想在单词中动态分配每个字符串,那么有几个选项;最简单的理解是将char word[M]更改为char *word;,每次分配短语时,请写the_phrase.word = malloc(some_number);。如果你分配一个单词数组,你需要为每个单词循环执行。

答案 1 :(得分:0)

我认为NM是编译时已知的常量。然后只需使用sizeof,.e.g。

 struct Word_setup*ptr = malloc(sizeof(struct Word_setup)*N);

也许你想要一个flexible array member。然后,它应该始终是struct last 成员,例如

  struct Word_setup {
     int count;
     unsigned size;
     char word[]; // of size+1 dimension
  };

当然,拥有一组灵活大小的结构是没有意义的 - 你需要一个指向它们的数组。