提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、内存管理
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;
}