动态内存申请与释放

前提条件
如果输入数据时,先告诉你个数,然后再输入,要记录每个数据,这时就要用到动态内存分配。
首先,要引用stdlib.h
你只能要多少个字节为单位的空间,不能说多少个int之类的,所以只能用n*sizeof(int)
它会返回一个void类型的东西。
做完以后,要free它。虽然说,对于小程序没写free是没问题,但是对于大程序来说,就必定要写free

int *a = (int*)malloc(n*sizeof(int));
free(a);

注意:一定要将malloc的空间变成指针类型
没空间后会怎么样?
会返回0,或者叫做NULL
那系统能给你多大的空间?
其实,你可以这样做

#include 
#include 
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

你可能感兴趣的:(#,我与C语言,c语言)