在C中为结构数组声明和分配内存

时间:2013-05-14 03:23:34

标签: c arrays string memory-management structure

我正在尝试为如下定义的结构数组声明和分配内存:

typedef struct y{
int count;
char *word;
} hstruct

我现在拥有的是:

hstruct *final_list;
final_list = calloc (MAX_STR, sizeof(hstruct));

MAX_STRchar word选择器的最大大小。 我计划能够将其称为: final_list[i].count,这将是一个整数和 final_list[i].word,这将是一个字符串。

i是一个整数变量。

但是,此类表达式始终返回(null)。我知道我做错了什么,但我不知道是什么。任何帮助,将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

包含指针的结构不直接保存数据,但保存指向数据的指针。指针本身的内存通过calloc正确分配,但它只是一个地址。

这意味着你有责任分配它:

hstruct *final_list;
final_list = calloc(LIST_LENGTH, sizeof(hstruct));

for (int i = 0; i < LIST_LENGTH; ++i)
  final_list[i].word = calloc(MAX_STR, sizeof(char));

这还需要在释放struct本身的数组之前释放final_list[i].word指向的内存。