动态内存分配
- malloc
#include<stdlib,h>
void*malloc(size_t size); //函数原型
向malloc申请的空间的大小是以字节为单位的。
如果申请失败,则返回0,或者叫做NULL
返回的结果是void*,需要类型转换为自己需要的类型
(int*)malloc(n*sizeof(int))
-
free()
把申请得来的空间还给”系统“ 注意:只能还申请来的空间的首地址。
示例:逆序输出
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int number;
int* a;
int i;
printf("输入数量:");
scanf_s("%d", &number);
//malloc返回的类型是void*,而a是int*,故需强制转换
a=(int*)malloc(number * sizeof(int));
for (i = 0; i < number; i++)
{
scanf_s("%d", a[i]); //把a当作数组
}
//逆序输出
for (i = number - 1; i >= 0; i--)
{
printf("%d", a[i]);
}
free(a); //把申请的内存还回去
return 0;
}
常见问题
- 申请了没free—>长时间运行内存逐渐下降
- 忘了
- 找不到合适的free的时机