当前位置: C语言 -- 标准库 -- <stdlib.h> -- free_sized

free_sized函数


概要:
#include <stdlib.h>
void free_sized(void *ptr, size_t size);

描述:

该函数释放参数ptr指向的内存;释放后内存管理函数可以进一步分配该处内存。

如果参数ptr是空指针,或者通过malloc、realloc或者calloc函数调用得到的结果,并且参数size等于内存分配时请求的分配大小,则该函数等价于free(ptr);否则该函数行为是未定义的。

aligned_alloc函数调用得到的结果不能传递给free_sized函数。


参数:
void *ptr

指向分配内存的指针。

size_t size

分配内存的大小。


返回值:

无


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
/*函数free_sized范例*/

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *str;
    int ch;
    size_t size;
    size_t i;

    puts("Input the size of the string.");
    scanf("%zu", &size);
    
    /*清空输入缓冲区。*/
    while(((ch = getchar()) != '\n') && (ch != EOF))
        ;
    
    puts("Input the string.");
    /*分配内存。*/
    str = malloc(size*sizeof(char));
    if(str == NULL)
    {
        puts("Memory allocation failed.");
        exit(EXIT_FAILURE);
    }

    /*向分配的内存中写入内容。*/
    for(i=0;i<(size-1);++i)
    {
        ch = getchar();
        if((ch == '\n') || (ch == EOF))
        {
            break;
        }
        str[i] = ch;
    }
    str[i] = '\0';

    puts(str);

    /*释放内存。*/
    free_sized(str, size*sizeof(char));
    
    return 0;
}


可能结果:

该程序先分配一块内存,然后向其写入内容,最后输出内容并释放内存。

(注:编译时实现还未支持free_sized函数。)


相关内容:
free 释放内存的函数。
free_aligned_sized 释放内存的函数。


主要参考资料:

1、ISO/IEC 9899:2024