一级指针的开辟空间和释放资源的两种方法

#define  _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h>
#include <string.h>
#include <stdio.h>


typedef struct Teacher
{
char name[64];
int age;
int id;


}Teacher;


void printArray(Teacher *array, int num)
{
for (int i = 0; i < num; i++)
{
printf("Array[i]:%d\n", array[i].age);
}
}


void sortArray(Teacher *array, int num)
{
Teacher tmp;
for (int i = 0; i < num; i++)
{
for (int j = i + 1; j < num; j++)
{
if (array[i].age>array[j].age)//从小到大
{
tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}
}


//开辟空间 方法一 return方法
Teacher *creatTeacher(int num)
{
Teacher *tmp = NULL;
tmp = (Teacher *)malloc(num * sizeof(Teacher));
if (tmp == NULL)
{
return NULL;
}
memset(tmp, 0, sizeof(tmp));//防就止产生野指针 因为能看到没有这句话,返回的tmp修改实参,有乱指的情况,加上就避免这个问题
return tmp;
}
//开辟空间 方法二 高一级指针(形参)来开辟空间(改变实参的值)
int  creatTeacher01(Teacher **tmp1, int num)
{
int ret = 0;
Teacher *tmp = NULL;
tmp = (Teacher *)malloc(num * sizeof(Teacher));
if (tmp == NULL)
{
ret = -1;
printf("func err:%d tmp == NULL\n", ret);
return ret;
}
memset(tmp, 0, sizeof(tmp));//防就止产生野指针 因为能看到没有这句话,返回的tmp修改实参,有乱指的情况,加上就避免这个问题
//*souce = tmpsource; 用二级指针形参改变一级指针实参
*tmp1 = tmp;//指针的间接赋值
return ret;
}


//释放一级指针  方法1
void Free_Teacher(Teacher *p)
{
if (p != NULL)
{
free(p);
}
}


//释放一级指针  方法2:让实参一级指针释放资源,采用高一级指针(形参)
void Free_Teacher01(Teacher **p)
{
Teacher *tmp = NULL;
if (p == NULL)
{
printf("func err p == NULL\n");
}
tmp = *p;//把二级指针还原成一级指针进行释放
if (tmp != NULL)
{
free(tmp);
}
*p = NULL;
}
int  main()
{
int ret = 0;
int num = 3;
//Teacher Array[3];//在栈上 分配内存
//建立一个对象生命周期


Teacher *Array = NULL;
//方法一 return方法


Array = creatTeacher(num);
if (Array == NULL)
{
ret = -1;
printf("func err creatTeacher:%d\n", ret);
return ret;
}
//方法二 高一级指针(形参)来开辟空间(改变实参的值)


//ret = creatTeacher01(&Array,num);
//if (ret!=0)
//{
// printf("func err creatTeacher01:%d",ret);
// return ret;
//}
for (int i = 0; i < num; i++)
{
//scanf("%d%d%d",&a,&b,&c);
printf("please input three integer number:\n");
scanf("%d", &(Array[i].age));
}


//打印老师年龄


printf("未排序之前\n");
printArray(Array, num);


//排序 冒泡法
sortArray(Array, num);
//排序后 打印


printf("未排序之后\n");
printArray(Array, num);


//释放资源


//1直接用形参释放 但是要另外加上一句置空
Free_Teacher(Array);
Array = NULL;


//2用高一级指针(形参),一句顶上面两句
//Free_Teacher01(&Array);
printf("hello...");
system("pause");
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值