gpt4 book ai didi

c - 一次释放堆上多个区域的机制

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

为了让我的项目更清晰,我想避免以这种方式使用 free(3):

free(ptr1);
free(ptr2);
.
.
.
free(ptrn);

所以我以这种方式添加了一个宏

#define stop_point NULL
#define free_space(...){ \
void *ptrs[] = {__VA_ARGS__,stop_point}; \
for(int i=0;ptrs[i]!=stop_point;i++) free(ptrs[i]);}

并按如下方式使用它:

free_space(ptr1,ptr2,...ptrn);

我认为这种机制可行,但存在一个问题,例如在上面的行中,如果 ptr2 为 NULL,则 ptr2 之后的其他指针(即 ptr3、ptr4...)将不会得到 free。我需要的是更好的 stop_point。我怎样才能做到这一点?

谢谢。

最佳答案

使用不同的哨兵。将宏更改为:

#define free_space(...) { \
void *ptrs[] = { __VA_ARGS__, ptrs }; \
for (int i = 0; ptrs[i] != ptrs; i++) free(ptrs[i]); }

或者使用从列表创建的数组的长度:

#define free_space(...) { \
void *ptrs[] = { __VA_ARGS__ }; \
for (size_t i = 0; i < sizeof ptrs / sizeof *ptrs; i++) free(ptrs[i]); }

关于c - 一次释放堆上多个区域的机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57609757/

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