结构体中二级指针的赋值和释放
Posted edan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构体中二级指针的赋值和释放相关的知识,希望对你有一定的参考价值。
背景说明:写项目时,想把数据按照结构体的格式存放,但是数据中有一个字符串数组,也就是二级指针,牵涉到开辟空间和释放的问题,可能是太基础了,查了很久每查到资料,后来自己写出来了。记录以下
心得:见指针就开辟空间,开辟完成后依次对应回收
代码:
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 }
以上是关于结构体中二级指针的赋值和释放的主要内容,如果未能解决你的问题,请参考以下文章
C 语言结构体 ( 结构体中嵌套一级指针 | 分配内存时先 为结构体分配内存 然后再为指针分配内存 | 释放内存时先释放 指针成员内存 然后再释放结构头内存 )