結構體中二級指針的賦值和釋放


背景說明:寫項目時,想把數據按照結構體的格式存放,但是數據中有一個字符串數組,也就是二級指針,牽涉到開辟空間和釋放的問題,可能是太基礎了,查了很久每查到資料,后來自己寫出來了。記錄以下

心得:見指針就開辟空間,開辟完成后依次對應回收

 

代碼:

 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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM