gpt4 book ai didi

c - C99 中的 Variadic 函数可以释放多个数组?

转载 作者:太空宇宙 更新时间:2023-11-04 05:59:19 25 4
gpt4 key购买 nike

目前,我有一个非常简单的函数来释放我程序中的 double 组:

void deallocate(double** array)
{
free(*array);
}

我希望这个函数是可变的,以便获取多个数组,并一个接一个地释放它们。我从来没有写过可变参数函数,因为可能存在指针技巧,所以我想知道如何做到这一点。

最佳答案

不要用可变函数来做这个,这个概念应该被淘汰。特别是对于接收所有相同类型的参数 void* 的东西来说完全没有意义。

只要有一个简单的函数,首先接收一个指针数组

void free_arrays(void* a[]) {
for (size_t i = 0; a[i]; ++i) free(a[i]);
}

然后你可以用这样的宏包装它

#define FREE_ARRAYS(...) free_arrays((void*[]){ __VA_ARGS__, 0 })

这假设您的指针都不是 0,因为处理将在该点停止。

如果您需要在某些指针为 0 的情况下也能正常工作,则必须将元素的数量作为第一个参数传递给您的函数。这有点乏味,但也可以在宏中确定。

void free_arrays0(size_t n, void* a[]) {
for (size_t i = 0; i < n; ++i) free(a[i]);
}

#define FREE_ARRAYS0(...) \
free_arrays( \
sizeof((void*[]){ __VA_ARGS__})/sizeof(void*), \
(void*[]){ __VA_ARGS__} \
)

关于c - C99 中的 Variadic 函数可以释放多个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21876746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com