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

free_aligned_sized函数


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

描述:

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

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

malloc、realloc、calloc函数调用得到的结果不能传递给free_aligned_sized函数。


参数:
void *ptr

指向分配内存的指针。

size_t alignment

分配内存的对齐方式。

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 
49 
50 
51 
52 
53 
/*函数free_aligned_sized范例*/

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

int main(void)
{
    double *ptr = NULL;
    size_t alignment = sizeof(double);
    size_t size;
    double sum = 0.0;
    int ch;

    puts("Input the number of elements.");
    if(scanf("%zu", &size) != 1 || size == 0)
    {
        puts("Invalid input.");
        return EXIT_FAILURE;
    }
    
    /*清空输入缓冲区。*/
    while(((ch = getchar()) != '\n') && (ch != EOF))
        ;
    
    /*分配内存。*/
    ptr = aligned_alloc(alignment, size*sizeof(double));
    
    if(ptr == NULL)
    {
        puts("Memory allocation failed.");
        return EXIT_FAILURE;
    }

    /*向分配的内存中写入内容。*/
    puts("Input the value of elements.");
    for(size_t i=0;i<size;++i)
    {
        if(scanf("%lf", ptr+i) != 1)
        {
            puts("Invalid input.");
            free_aligned_sized(ptr, alignment, size*sizeof(double));
            return EXIT_FAILURE;
        }
        sum += ptr[i];
    }
    printf("Average value: %.2f\n", sum/size);

    /*释放内存。*/
    free_aligned_sized(ptr, alignment, size*sizeof(double));
    
    return 0;
}


可能结果:

该程序先分配一块内存,然后向其写入若干个double类型浮点数,最后输出平均值并释放内存。

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


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


主要参考资料:

1、ISO/IEC 9899:2024