输入数据
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int number;
int *a;
printf("输入数量:");
scanf_s("%d",number);
// int a[number] //C99写法
// C99之前写法
// malloc的参数不是要多少个 int 不是数组要多少单元,而是这个数组占据多少空间以字节为单位
// 前面的(int*) 是类型转换
a = malloc(number*sizeof(int));
return 0;
}
如果输入数据时,先定义个数,然后再输入,记录每个数据
C99可以用变量做数组定义大小,C99之前只能
int a = (int ) malloc(n*sizeof(int));
使用 malloc 给出一块内存空间
malloc
#include<stdlib.h>
void* malloc(size_t size);
向 malloc 申请的空间大小是以字节为单位的
返回的结果是 void* 需要类型转换为自己需要的类型
需要的空间数量 * sizeof
(int*)malloc(n*sizeof(int))
没空间
如果申请失败返回0,或者 NULL
系统能给多大空间
申请空间的代码
申请100兆空间:1024 是 1k 1024*1024是一兆 再*100就是100兆
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
void* p;
int cnt = 0;
while(p = malloc(100 * 1024 * 1024){
cnt ++;
}
printf("分配了%d00mb空间\n",cnt);
return 0;
}free()
申请来的空间都要还给系统
只能还申请来的空间的首地址
跟 malloc 是配套使用的
常见问题
申请空间没 free() 长时间运行内存下降
free() 过了再次 free()
地址变了,再一次 free()