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

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

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

代码:

 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 }

原文地址:https://www.cnblogs.com/edan/p/10156031.html

时间: 2024-11-08 21:45:03

结构体中二级指针的赋值和释放的相关文章

file结构体中private_data指针的疑惑【转】

本文转载自:http://www.cnblogs.com/pengdonglin137/p/3328984.html hi all and barry, 最近在学习字符设备驱动,不太明白private_data在字符驱动中的作用,我们在 驱动中添加一个设备结构体,然后定义了这个结构体的全局指针变量,接着我们就能在 驱动程序中使用这个指针了.我看到很多驱动程序中都把结构体指针付给private_data, 然后对private_data操作. 为什么要使用private_data,难道仅仅是避免使

C/C++ 错误笔记-在给结构体中的指针赋值时,要注意该指针是否已指向内存空间

先来看下面的例子: #include <stdlib.h> #include <string.h> #include <stdio.h> #pragma warning(disable:4996) typedef struct _Student { char name[64]; int age; }Student; typedef struct _Teacher { char name[64]; int age; char *p1; char **p2; Student

C提高4 多维数组,结构体与二级指针

昨天的试题:原题见昨天作业题 [email protected]:~/high/day03$ cat main.c  /* 二级指针,绝佳训练题1 */ #include <stdio.h> #include <stdlib.h> #include <string.h> int spitspring(char *buf1,char *c,char **myp,int *total) { char *p_head =  buf1; char *p_tail =  buf1

结构体中函数指针与typedef关键用途(函数指针)

// 结构体函数指针.  #include<stdio.h> //为了代码的移植考虑,一般使用typedef定义函数指针类 ,另一个好处是,减少代码的书写量.  typedef void (*shout)(char *name,int age); typedef struct {  //用指针来存储字符串     char *name;    int age ;    shout personinfo; }person; //类似于c++中类方法的实现,在这里,是为结构体中指针函数提供实现.在

结构体中的指针与零长度数组

0长度的数组在ISO C和C++的规格说明书中是不允许的,但是由于gcc 预先支持C99的这种玩法,所以,"零长度数组"在gcc环境下是合法的. 先看下面两个例子. pzeroLengthArray.c #include <stdio.h> struct str { int len; char *s; }; struct foo { struct str *a; }; int main() { struct foo f = {0}; printf("sizeof(

c 结构体中存在指针,指针的不同赋值方法

#include<stdio.h>#include<stdlib.h>#include<string.h>struct parameter{ char *fd; int hit;};int main() { struct parameter*pptr = (struct parameter*)malloc(sizeof(struct parameter)); memset(pptr, 0, sizeof(struct parameter)); //pptr->fd

结构体中指针赋值问题的分析及C代码示例

问题描述 某结构体的定义如下: typedef struct { int iAge; // 年龄 char szAddr1[100]; // 地址1 char *pszAddr2; // 地址2 char **pszAddr3; // 地址3 } T_PeopleInfo; 请问如何对结构体中的各个成员变量(尤其是指针变量)进行赋值? 问题分析及C代码示例 我们可以看到,在结构体T_PeopleInfo中,pszAddr2和pszAddr3均为指针,其中pszAddr2为一级指针,pszAddr

c语言:通过指向结构体变量的指针变量输出结构体变量中成员的信息

通过指向结构体变量的指针变量输出结构体变量中成员的信息. 解:程序: #include<stdio.h> #include<string.h> int main() { struct Student { long int num; char name[20]; char sex[10]; float score; }; struct Student stu_1;//定义struct Student类型的变量stu_1 struct Student *p; p = &stu_

结构体中定义函数指针

转自:http://blog.csdn.net/unix21/article/details/9293877 结构体指针变量的定义,定义结构体变量的一般形式如下: 形式1:先定义结构体类型,再定义变量 struct结构体标识符 { 成员变量列表;… }; struct 结构体标识符 *指针变量名; 变量初始化一:struct结构体标识符 变量名={初始化值1,初始化值2,…, 初始化值n }; 形式2:在定义类型的同时定义变量 struct结构体标识符 { 成员变量列表;… } *指针变量名;