C语言入门到进阶(动态分配内存) 7th/Dec./2019

思考

什么情况下需要动态分配内存?
1、存储的数据需要延长生命周期
2、一个指针变量需要存储数据,变量本身只能存地址,不能存数据,需要分配内存空间来存储数据(手动分配内存空间)


主要的技术:

malloc free realloc 的使用


  • 1、malloc和free的使用

不使用malloc的例子

#include <stdio.h>
int main(){
    char name[100] = {};
    scanf("%s", name);
    printf("%s\n",name); 
    return 0;
}
运行结果

若想利用指针类接收数据,由于指针变量本身只能存地址,不能存数据,需要分配内存空间来存储数据。
方法如下:利用malloc申请内存空间,分配一片指针指向的内存,使用malloc要导入头文件#include <stdlib.h>

#include <stdio.h>
#include <stdlib.h>
int main(){
    char *name ;//未指向内存,不能存储数据 
    name = (char *)malloc(10*sizeof(char));//10个字节的内存,内存空间强制为char*类型 
    if(name == NULL){
        // 申请内存失败 
        exit(EXIT_FAILURE); //程序退出 
    }
    scanf("%s", name);
    printf("%s\n",name); 
//使用完毕必须自己手动释放内存
    free(name); //free malloc 配套使用
    return 0;
}
运行结果

两者的对比,前者利用数组,系统自动分配了内存空间,但内存从一开始规定了,不能更改,浪费的内存空间较大;而后者利用malloc方法,自己分配的内存,浪费的内存较小。


  • 2、realloc的使用
    作用:使用realloc动态改变已经分配的内存的大小(增加或减少之前分配的内存大小)

    改变后内存空间:20个字节
name = (char *)realloc(name, 20*sizeof(char));
    if(name == NULL){
        //退出之前必须将之前分配的内存释放掉
        free(name); 
        exit(EXIT_FAILURE);
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容