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


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

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

    代码:

     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 }
  • 相关阅读:
    Vue中关于路由传参query和params的区别
    网页从输入网址到渲染完成经历了哪些过程?
    http常见的状态码
    项目中遇到哪些难点,如何解决的
    vue双向绑定、Proxy、defineproperty
    Proxy相比于defineProperty的优势
    axios
    虚拟DOM
    vue、react、angular三大框架对比 && 与jQuery的对比
    DOS、DOS攻击、DDOS攻击、DRDOS攻击
  • 原文地址:https://www.cnblogs.com/edan/p/10156031.html
Copyright © 2020-2023  润新知