C语言内存处理

作者: Izzieo_O | 来源:发表于2016-02-09 22:29 被阅读1244次

    1.动态存储分配

    1.1.内存分配函数

    在stdlib.h中声明
    (1)malloc():分配内存块,不初始化分配的内存块
    (2)calloc():分配内存块,且对内存块进行清除
    (3)realloc():调整之前已分配的内存块
    malloc不需要对已分配的内存块进行清除

    1.2.空指针

    调用内存分配函数时,可能会出现出发对所需的最大的内存块进行定位,出现这样的问题,就会返回空指针。

    2.动态分配字符串

    (1)使用malloc()函数分配

    调用该函数分配内存,但没有为其指定名字。而是返回分配的内存区中的一个字节的地址,该地址可以被赋值给一个指针变量,通过指针访问内存。
    malloc()函数原型:

    void *malloc(size_t size)
    
    (2)字符串函数中使用动态存储分配
    //定义一个函数,希望不改变任何一个字符串而完成字符串的拼接
    char *newStr;
        newStr =(char *) malloc(strlen(s1) + strlen(s2) + 1);
        if (newStr==NULL)
        {
            printf("ERROR");
            exit(EXIT_FAILURE);
        }
        strcpy(newStr, s1); //s1复制到新内存区
        strcat(newStr, s2); //s2拼接到新字符串后面
    

    3.动态分配数组

    3.1.使用malloc分配

    //使用malloc 函数申请40个float类型内存空间,使用指针p指向该空间所在位置
    float *p;
    p=(float*) malloc (40*sizeof(float));
    

    3.2.calloc()函数

    函数原型

    void *calloc(size_t nmemb, size_t size);
    

    成功分配内存后,该函数会将内存块中的所有位都置0以完成初始化。

    long *new;
    new=(long*)calloc(100,sizeof(long));
    

    3.3.realloc()函数

    函数原型

    void *realloc(void *ptr, size_t size);
    

    调用该函数时,指针ptr必须是已经指向了某个内存块,且该内存块必须是之前调用malloc()\calloc()\realloc()函数时分配的。size表示内存块的新尺寸。

    如果不能成功完成内存块的扩充,则返回空指针。
    如果调用realloc()时将其第一个实际参数设置为空指针,则realloc()就为malloc().
    如果调用时以0作为第二个参数,则该函数负责释放掉内存块。

    4.释放内存

    4.1.free()函数

    free()的实参必须是指针,且必须是由free之前的内存分配函数返回的。

    4.2.“无效指针”

    free()释放了不再需要的内存,节省堆空间。但是指针它的指针仍然存在,指向的仍是之前释放掉的空间。

    相关文章

      网友评论

        本文标题:C语言内存处理

        本文链接:https://www.haomeiwen.com/subject/hrwykttx.html