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

定长度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却报一个错,原因至今没搞清楚;

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值