码迷,mamicode.com
首页 > 其他好文 > 详细

结构体中二级指针的赋值和释放

时间:2018-12-21 16:10:46      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:ror   size   malloc   完成   free   create   结构   sizeof   clu   

背景说明:写项目时,想把数据按照结构体的格式存放,但是数据中有一个字符串数组,也就是二级指针,牵涉到开辟空间和释放的问题,可能是太基础了,查了很久每查到资料,后来自己写出来了。记录以下

心得:见指针就开辟空间,开辟完成后依次对应回收

 

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 
 5 typedef struct data{
 6     int id;
 7     int count;
 8     char **addr;
 9 }Data_t;
10 //创建对象指针
11 int create_data(Data_t **arg,int num)
12 {
13     int i;
14     Data_t *tmp = NULL;
15     tmp = (Data_t *)malloc(sizeof(Data_t));
16     if(tmp == NULL)    
17     {
18         return -1;
19     }
20     tmp->addr = (char **)malloc(sizeof(char *)*num);
21     for(i = 0;i < num;i++)
22     {
23         tmp->addr[i] = malloc(100);//地址大小
24     }
25     *arg = tmp;
26     return 0;
27 }
28 //释放空间
29 int free_data(Data_t **arg,int num)
30 {
31     Data_t *tmp= NULL;
32     tmp = *arg;
33     int i;
34     for(i = 0;i<num;i++)
35     {
36         free(tmp->addr[i]);
37     }
38     free(tmp->addr);
39     free(tmp);
40     *arg = NULL;
41     return 0;
42 }
43 
44 
45 int main(void)
46 {
47     Data_t *data = NULL;
48     int i,num = 2;
49     int result;
50 
51     result = create_data(&data,num);
52     if(result == -1)
53     {
54         printf("func create_data error:%d\n",result);
55         return result;
56     }
57     else
58     {
59         data->id = 123456;
60         data->count = 2;
61         
62         for(i = 0;i < data->count;i++)
63         {
64             strcpy(data->addr[i],"Hello");
65         }
66     }
67 
68     printf("%s %s \n",data->addr[0],data->addr[1]);
69     
70     free_data(&data,num);
71     return 0;
72 }

 

结构体中二级指针的赋值和释放

标签:ror   size   malloc   完成   free   create   结构   sizeof   clu   

原文地址:https://www.cnblogs.com/edan/p/10156031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!