前提条件
如果输入数据时,先告诉你个数,然后再输入,要记录每个数据,这时就要用到动态内存分配。
首先,要引用stdlib.h
。
你只能要多少个字节为单位的空间,不能说多少个int
之类的,所以只能用n*sizeof(int)
。
它会返回一个void
类型的东西。
做完以后,要free
它。虽然说,对于小程序没写free
是没问题,但是对于大程序来说,就必定要写free
。
int *a = (int*)malloc(n*sizeof(int));
free(a);
注意:一定要将malloc的空间变成指针类型
没空间后会怎么样?
会返回0,或者叫做NULL
。
那系统能给你多大的空间?
其实,你可以这样做
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p;
int cnt = 0;
while (p = (int *)malloc(100 * 1024 * 1024)) {
cnt++;
}
printf("分配了%d00MB的空间\n", cnt);
}
如何理解malloc
的用法
可以这样记
帮我malloc n个sizeof(valueType)
的空间,并将其强制转化为什么类型的指针(valueType *)
,最后让一个指针变量指向它。
注意
free
你只能free
你借到的部分,别的不行,但是free(NULL)
可以。因为每写一个指针,就要初始化一次。
所以,你每写一个malloc
,就要写一个free
。
但是不能free
,再free
,因为会崩溃。
地址变了也不能free
。