malloc 和 free

2021-10-21  本文已影响0人  小阿牛的爸爸

头文件位置

#include <stdio.h>

1 malloc

1.1 函数原型

void* malloc (size_t size);

1.2 函数介绍

分配一个大小为size字节的内存块,返回一个指向块开头的指针。
新分配的这块内存空间没有初始化,里面的内容是不确定的,所以,在使用前需要进行初始化
如果size为0,返回值取决于特定的库实现(它可能是空指针,也可能不是空指针),但返回的指针不能解引用。

1.3 函数入参

要分配的空间的大小,单位为字节,size_t是一个无符号的整型

1.4 函数返回值

指向块开头的指针。

2 free

2.1 函数原型

void free (void* ptr);

2.2 函数介绍

释放之前由调用malloc、calloc或realloc分配的内存块,使其可以再次用于进一步的分配。
如果传入的指针ptr没有指向用上述函数分配的内存块,则会导致不确定的行为
如果ptr是空指针,则函数不执行任何操作。
注意,这个函数并没有改变ptr本身的值,因此它仍然指向相同的(现在是无效的)位置

2.3 函数入参

指向先前用malloc、calloc或realloc分配的内存块的指针。

2.4 函数返回值

无。

3 示例

使用流程如下:
malloc(size)分配地址空间 -> 分配后进行初始化 -> 使用后调用free释放掉空间

#include <stdio.h>      /* printf, scanf, NULL */
#include <stdlib.h>     /* malloc, free, rand */

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

    printf ("How long do you want the string? ");
    scanf ("%d", &i);
    // 1. 分配空间
    buffer = (char*) malloc (i+1);
    if (buffer==NULL) {
        printf ("malloc space error\n");
        exit (1);
    }
    
    // 2. 初始化并赋值
    for (n=0; n<i; n++) {
        buffer[n]=rand()%26+'a';
    }
    buffer[i]='\0';

    printf ("Random string: %s\n",buffer);
    // 3. 使用完成后释放
    free (buffer);

    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读