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++上的运行结果不一样。
(注释:老师运行后的报错是,释放的地址,不是最早申请的位置)
指针变量定义的好习惯(初始定义为0)
#include<stdio.h>
#include<stdlib.h>
int main() {
int i = 1;
void* p =0;//指针被定义后,就进行初始化
free(p);//由于指针初始化,则在释放的时候,即使p没有被成功malloc,程序也可以正确执行。
return 0;
}
注释:对于申请没有free,本处所指的现象是 一直运行的大型程序,如果内存空间一直被申请,那么后续能够使用的内存空间就比较小。不利于程序的执行。在我们写的小程序中,整个程序运行结束后,整个程序所占用的空间,就会被释放。