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


    定长度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
    b=%d
    ",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
    ", i, strs+i);
        		(strs+i)->a = i;
        		sprintf(tmp, "t_%d", i);
        		strcpy((strs+i)->b, tmp);
        		printf("====>>>>>>>>>>>>>>> %d end
    ", i);
        	}
        	return strs;
        }
        int main()  
        {
        	printf("%d,%d-%d--
    ", sizeof(Str*), sizeof(Str**), sizeof(Str));
        	int l,i;
        	Str* strs=mk(&l);
    
    
        	for(i=0;i<l;i++){
        		printf("%d => %d, %s;...
    ", i, (strs+i)->a, (strs+i)->b);
        	}
        	free(strs);
        }  
           
    
    

    16行,我本来写的sizeof(Str *),能正常运行,但valgrind却报一个错,原因至今没搞清楚;

    仔细想来,因为我想搞一个结构体数组,那么,有多少个结构体,我就应该分配多少个份*一个结构体需要的空间,一次性分配够,释放时也一次性释放;

    以前我总想着要多少个成员,就分配多少个指针,再给每个指针指向的地方分配足够的内存,结果虽然但复杂,容易出错。

  • 相关阅读:
    腾讯2014年实习生招聘笔试面试经历
    GitHub具体教程
    Hadoop Hive与Hbase关系 整合
    阿里中间件——消息中间件Notify和MetaQ
    Android分享介绍
    Python的包管理工具Pip
    [ACM] POJ 1094 Sorting It All Out (拓扑排序)
    机器学习实践指南:案例应用解析
    android之照相、相冊裁剪功能的实现过程
    组织:OASIS(结构化信息标准促进组织)
  • 原文地址:https://www.cnblogs.com/lein317/p/5067589.html
Copyright © 2020-2023  润新知