2013-05-14 55 views
1

数组我想声明并定义为结构数组分配内存分配内存如下:申报和结构用C

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)。我知道我做错了什么,但我不知道是什么。任何帮助,将不胜感激。谢谢。

+0

你是在初始化任何地方的计数或单词吗? – 2013-05-14 03:25:53

+1

你对calloc的工作方式感到困惑。第一个参数应该是hstruct数组中元素的个数。 – 2013-05-14 03:41:40

回答

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

这也需要释放结构本身的阵列之前,以释放final_list[i].word指向的内存。