C语言动态内存管理

1.为什么要动态内存

C语言的数据结构(数组,结构体...)通常是固定大小的,即使是变长数组,在其作用域内依然是固定长度的。

但是对于空间的要求,有些时候需要的空间大小在程序运行的时候才能知道,因此C语言引入动态内存开辟,让程序员自己可以申请和释放空间

2.malloc和free

I.malloc

C语言动态内存管理_第1张图片 

malloc函数可以用于开辟动态内存,这个函数向内存申请一块连续可用的空间,并返回指向这块空间的地址

  • 如果开辟成功,则返回一个指向开辟好的空间的指针
  • 如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要检查
  • 返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体使用的时候由使用者自己转换
  • 如果参数size为0,malloc的行为是标准未定义的,取决于编译器 

II.free

C语言动态内存管理_第2张图片

 C语言提供了另外一个函数free,专门用于做动态内存的释放和回收

  • 如果参数ptr指向的空间不是动态内存开辟的,那free函数的行为是未定义的
  • 如果参数ptr是NULL指针,则函数什么都不做

示例:

#include       /* printf, scanf, NULL */
#include      /* malloc, free, rand */

int main()
{
    int i, n;
    char* buffer;

    printf("How long do you want the string? ");
    scanf("%d", &i);

    buffer = (char*)malloc(i + 1);//申请一个字节的空间
    if (buffer == NULL) exit(1);

    for (n = 0; n < i; n++)///生成n个随机的小写字母
        buffer[n] = rand() % 26 + 'a';
    buffer[i] = '\0';

    printf("Random string: %s\n", buffer);
    free(buffer);//释放申请的空间

    return 0;

你可能感兴趣的:(C语言,c语言,开发语言,青少年编程,学习)