zoukankan      html  css  js  c++  java
  • 结构体中二级指针的赋值和释放

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

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

    代码:

     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 }
  • 相关阅读:
    JMeter性能测试
    CentOS7下安装elsticsearch、kibana、filebeat、logstash服务
    Docker容器 之 Harbor 私有镜像仓库的搭建
    Vagrant and VirtualBox 构建 CentOS7
    java 位运算 之 左移和右移理解
    List如果一边遍历,一边删除,且不会报错呢?
    享元模式
    装饰器模式
    日常记录
    销售与营销有什么区别?
  • 原文地址:https://www.cnblogs.com/edan/p/10156031.html
Copyright © 2011-2022 走看看