【Mallco学习记录】

发布于:2023-01-09 ⋅ 阅读:(180) ⋅ 点赞:(0)

8020 mallloc学习记录

链接: B站源视频

 #include<stdlib.h>  //必须引用
int *a=(int *)malloc(sizeof(int)*n);
//maolloc申请的是多少字节的空间。返回为void,必须添加强制类型转换
 //对其申请空间之后,可以将其视为数组进行操作,进行赋值等操作。  
free(a);//使用结束之后,free掉指针的位置

在这里插入图片描述

mall申请失败

malloc申请失败(内存空间过大)之后, 会返回null。


#include<stdio.h>
#include<stdlib.h>
int main() {
	void* p;
	int cnt = 0;
	while ((p=malloc(100*1024*1024))){//包含两个语句;1.申请空间给p 2.整个括号内的表达式是否为空
		cnt++;
	}

	printf("分配了%d00MB的空间\n", cnt);
	return 0;
}

在这里插入图片描述运行结果

申请之后的地址必须要还,且要还申请过来的空间的首地址。
在这里插入图片描述

例子:如果还的不是申请过来的首地址,会如何报错?
在这里插入图片描述

会导致free的结果出错。

但是与老师在DEV-c++上的运行结果不一样。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4BbAWAmq-1660987138113)(C:\Users\hanxin\AppData\Roaming\Typora\typora-user-images\image-20220820171318970.png)]

(注释:老师运行后的报错是,释放的地址,不是最早申请的位置)

指针变量定义的好习惯(初始定义为0)

#include<stdio.h>
#include<stdlib.h>
int main() {
	int i = 1;
	void* p =0;//指针被定义后,就进行初始化
	free(p);//由于指针初始化,则在释放的时候,即使p没有被成功malloc,程序也可以正确执行。

	return 0;
}

在这里插入图片描述

注释:对于申请没有free,本处所指的现象是 一直运行的大型程序,如果内存空间一直被申请,那么后续能够使用的内存空间就比较小。不利于程序的执行。在我们写的小程序中,整个程序运行结束后,整个程序所占用的空间,就会被释放。


网站公告

今日签到

点亮在社区的每一天
去签到