结构体中套二级指针

结构体

typedef struct Teacher
{
  char name[64];
  char *alisname;
  char **stuname;
  int age;
  int id;
}Teacher;

给结构体分配内存、在结构体中套二级指针

int createTeacher02(Teacher **p, int num)
{
    int i = 0, j = 0;
    Teacher *tmp = NULL;
    tmp = (Teacher *)malloc(sizeof(Teacher) * num); //Teacher Array[3]
    if(tmp == NULL)
    {
        return -1;
    }
    memset(tmp, 0, sizeof(Teacher) * num);

    for(i  = 0; i < num; i++)
    {
        char **p = NULL;
        //malloc一级指针
        tmp[i].alisname = (char *)malloc(60);

        //二级指针的第三种内存模型
    
        //打造二维内存
        p = (char **)malloc(3 * sizeof(char *));
        for(j = 0; j<3; j++)
        {
            p[j] = (char *)malloc(120);
        }
        tmp[i].stuname = p;
    }
    *p = tmp; //二级指针  形参  去间接的修改 实参 的值

    return 0;
}

 

内存模型图

释放内存空间 一层一层释放

void FreeTeacher(Teacher *p, int num)
{
    int i = 0, j = 0;
    if(p == NULL)
    {
        return ;
    }
    for(i = 0; i < num; i++)
    {
        char **myp;
        //释放一级指针
        if(p[i].alisname != NULL)
        {
            free(p[i].alisname);
        }
        free(p);

        //释放二级指针
        if(p[i].stuname != NULL)
        {
            myp = p[i].stuname;
            for(j = 0; j < 3; j++)
            {
                if(myp[j] != NULL)
                {
                    free(myp[j]);
                }
            }
            free(myp);
            p[i].stuname = NULL;
        }
    }
    free(p);
}

 

posted @ 2017-05-07 17:06  Liu_Jing  Views(1260)  Comments(0)    收藏  举报