背景說明:寫項目時,想把數據按照結構體的格式存放,但是數據中有一個字符串數組,也就是二級指針,牽涉到開辟空間和釋放的問題,可能是太基礎了,查了很久每查到資料,后來自己寫出來了。記錄以下
心得:見指針就開辟空間,開辟完成后依次對應回收
代碼:
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 }