背景说明:写项目时,想把数据按照结构体的格式存放,但是数据中有一个字符串数组,也就是二级指针,牵涉到开辟空间和释放的问题,可能是太基础了,查了很久每查到资料,后来自己写出来了。记录以下
心得:见指针就开辟空间,开辟完成后依次对应回收
代码:
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 ",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 ",data->addr[0],data->addr[1]); 69 70 free_data(&data,num); 71 return 0; 72 }