c语言-动态内存

为什么要使用动态内存?


静态数组存在的问题:1.不能根据变量n动态申请内存

                                     2.不能申请大块内存

动态内存:
    1.动态内存有什么用?
       1.1:可以根据变量n动态申请数组   
    2.怎么使用动态内存?
      2.1:malloc(90%):申请动态内存(从堆内),有可能失败,返回NULL(1.堆内空间不够 2.堆内空间足够,但是连续空间不够)
      2.2:calloc(1%): 在malloc的基础上,将初始值全部变成0   
      2.3:realloc(9%)  重新从堆内申请动态内存
    3.为什么要释放动态内存?(防止内存泄露)
    4.注意事项?
        4.1: malloc的时候,前面的强转和后面的sizeof内的类型不一致,sizeof里面没有*星号
        4.2:calloc注意,两个参数不要写反
        4.3:realloc注意:第一个参数需要填写原先内存的开头地址
                         第二个参数需要的是重新开辟的总字节数,不是在原先内存的基础上扩充的字节数

malloc代码示例:


int* p1 = (int*)malloc(10 * sizeof(int));  //x*y  x:申请空间个数 y:申请空间单个大小

char* p2 = (char*)malloc(20 * sizeof(char));

double* p3 = (double*)malloc(100 * sizeof(double));
	

realloc代码示例:

    //在上面malloc的基础上都扩容两倍

	p1 = (int*)realloc(p1, 10 * sizeof(int) * 2);

	p2 = (char*)realloc(p2, 2 * 20 * sizeof(char));

	p3 = (double*)realloc(p3, 2 * 100 * sizeof(double));

上一篇:Tomcat启动报错org.springframework.web.context.ContextLoaderListener类配置错误——SHH框架


下一篇:小小调度器的优化版本:Tiny Macro OS for MCU