本文记录一些C语言内存控制函数

动态内存分配

malloc 函数

  • 函数名: malloc
  • 功 能: 配置内存空间
  • 用 法: void *malloc(size_t size);
  • 返回值: 若配置成功则返回一指针,失败则返回NULL。
  • 说 明: malloc()用来配置内存空间,其大小由指定的size决定。

  • 程序例:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main(int argc,char * argv[])
{
    struct Student{
        char username[8];
        char age;
    };
    struct Student * stu = malloc(sizeof(struct Student)*2);
    stu->age = 110;
    (stu+1)->age = 20;
    printf("Age %d \n",stu->age);
    printf("Age++ %d \n",(stu+1)->age);
    free(stu);
    return 0;
}

PS:malloc函数申请的内存空间中默认都是垃圾值,使用完毕后记得free释放,否则会造成内存泄露。

calloc 函数

  • 函数名: malloc
  • 功 能: 配置内存空间
  • 用 法: void *calloc(size_t nmemb,size_t size);
  • 返回值: 若配置成功则返回一指针,失败则返回NULL。
  • 说 明: calloc()用来配置nmemb个相邻的内存单位,每一单位的大小为size,并返回指向第一个元素的指针。这 和使用下列的方式效果相同:malloc(nmemb*size);不过,在利用calloc()配置内存时会将内存内容初始化 为0。

  • 程序例:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main(int argc,char * argv[])
{
    struct Student{
        char username[8];
        char age;
    };
    struct Student * stu = calloc(2, sizeof(struct Student));

    stu->age = 110;
    (stu+1)->age = 20;
    printf("Age %d \n",stu->age);
    printf("Age++ %d \n",(stu+1)->age);
    free(stu);
    return 0;
}

free 函数

  • 函数名: free
  • 功 能: 释放原先配置的内存
  • 用 法: void free(void *ptr);
  • 返回值: 若配置成功则返回一指针,失败则返回NULL。
  • 说 明: 参数ptr为指向先前由malloc()、calloc()或realloc()所返回的内存指针。调用free()后ptr所指的内存空间便会被收回。假若参数ptr所指的内存空间已被收回或是未知的内存地址,则调用free()可能会有无法预期的 情况发生。若参数ptr为NULL,则free()不会有任何作用。