19c语言——内存管理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、内存管理

1.内存泄漏

内存泄漏L使用malloc申请空间,free没有释放,

2.堆和栈的区别

1.栈区空间由操作系统管理,操作系统负责栈区空间的申请释放
2.堆区程序员,手动申请malloc,手动释放free
3.堆区内存方向自低向高
4.栈区内存方向自高向低

3.malloc函数使用

1.函数类型
void *malloc(size_t size);
参数:
申请内存空间的大小:size_t size
void *返回值为万能指针,申请什么类型的内存用什么类型的指针接
2.注意:
(1)申请的返回值要进行判空,栈区空间不足会申请失败。
(2)指针释放之后要将指针向空,释放意味着不能进行访问,不致空会导致非法操作。
示例代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*定义结构体*/
typedef struct student{
	char name[50];
	char sex;
	int age;
}stu;

/*申请堆区空间*/
stu* get_stu_indfer()
{
	stu * s1 = (stu *malloc(sizeof(stu)); 
	if(NULL  == s1)
	{
		printf("malloc error\n");
		return NULL;
	}
	printf("please input name\n");
	gets(s1->name);
	printf("please input sex\n");
	scanf("%c",&s1->sex);
	printf("please input age\n");
	scanf("%d",&s1->age);
	return s1;
}
/释放空间/
int free_stu(stu *s1)
{
	free(s1);
	s1 = NULL;
	return 0;
}
void show(stu *s1)
{
	printf("name %s\n",s1->name);
	printf("sex %d\n",s1->sex);
	printf("age %d\n",s1->age);
	return ;
}
int main(int argc, const char *argv[])
{
	stu * s1 = NULL;
	s1 = get_stu_indfer();
	show(s1);
	free(s1);
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值