C语言 内存管理

C语言内存管理是在 <stdlib.h> 头文件里

序号 函数和描述
1 void *calloc(int num, int size);
在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*size 个字节长度的内存空间,并且每个字节的值都是0。
2 void free(void *address);
该函数释放 address 所指向的内存块,释放的是动态分配的内存空间。
3 void *malloc(int num);
在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。
4 void *realloc(void *address, int newsize);
该函数重新分配内存,把内存扩展到 newsize

C 动态分配内存之 malloc() 函数

使用malloc 动态分配内存

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <setjmp.h>
#include <stdarg.h>

int main()
{
    // 使用malloc 动态分配内存
    char *str = (char *)malloc( 200 * sizeof(char) );
    if( str == NULL )
    {
      fprintf(stderr, "malloc error \n");
    }
    else
    {
      strcpy( str, "Hello pangugle");
    }

    printf("str = %s\n", str );

    return 0;
}

运行结果为

str = Hello pangugle

说明

  • sizeof(char) 表示 获取 char 占用空间大小
  • 200 * sizeof(char) 表示 分配空间大小 为 200 倍 的char 空间,
  • (char *)malloc( 200 * sizeof(char) ) 真正分配内存,并以指针返回该地址!

注意: 内存是一个连续的空间;

C 动态分配内存之 realloc() 函数 和 释放内存 free()函数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <setjmp.h>
#include <stdarg.h>

int main()
{
    // 使用malloc 动态分配内存
    char *str = (char *)malloc( 100 * sizeof(char) );
    if( str == NULL )
    {
      fprintf(stderr, "malloc error \n");
    }
    else
    {
      strcpy( str, "Hello pangugle");
    }

    printf("str = %s\n", str );

    // 重新分配内存大小
    str = (char *) realloc( str, 200 * sizeof(char) );
    if( str == NULL )
    {
      fprintf(stderr, "realloc ereor \n");
    }
    else
    {
      strcat( str, ",Hello world!");
    }

    printf("str = %s\n", str );

    // 释放内存
    free(str);

    return 0;
}