定长度结构体数组、不定长度结构体指针初始化

发布时间:2016-12-7 18:38:24 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"定长度结构体数组、不定长度结构体指针初始化",主要涉及到定长度结构体数组、不定长度结构体指针初始化方面的内容,对于定长度结构体数组、不定长度结构体指针初始化感兴趣的同学可以参考一下。

定长度1: #include <stdio.h> #include <stdlib.h> typedef struct str { int a; int b; }Str; int main() { Str s[1]={{a:1,b:2}};//注意这里的冒号 printf("a=%d\nb=%d\n",s[0].a,s[0].b); } 不定长度2:  #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> typedef struct { int a; char b[56]; }Str; Str * mk(int *l){ int i; char tmp[32]; *l=4; Str *strs =(Str *) calloc(*l, sizeof(Str));//这里用sizeof(Str *),每个成员间隔也会是60,但是valgrind会在i=1的位置报错,其它位置不报错,这个问题我完全不理解 for(i=0;i<*l;i++) { printf("====>>>>>>>>>>>>>>> %d, %x\n", i, strs+i); (strs+i)->a = i; sprintf(tmp, "t_%d", i); strcpy((strs+i)->b, tmp); printf("====>>>>>>>>>>>>>>> %d end\n", i); } return strs; } int main() { printf("%d,%d-%d--\n", sizeof(Str*), sizeof(Str**), sizeof(Str)); int l,i; Str* strs=mk(&l); for(i=0;i<l;i++){ printf("%d => %d, %s;...\n", i, (strs+i)->a, (strs+i)->b); } free(strs); } 16行,我本来写的sizeof(Str *),能正常运行,但valgrind却报一个错,原因至今没搞清楚; 仔细想来,因为我想搞一个结构体数组,那么,有多少个结构体,我就应该分配多少个份*一个结构体需要的空间,一次性分配够,释放时也一次性释放; 以前我总想着要多少个成员,就分配多少个指针,再给每个指针指向的地方分配足够的内存,结果虽然但复杂,容易出错。

上一篇:iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的区别及用途
下一篇:hdu&nbsp;2393&nbsp;Higher&nbsp;Math

相关文章

相关评论