gpt4 book ai didi

c - ffmpeg 中的 av_freep 如何工作?

转载 作者:太空狗 更新时间:2023-10-29 15:21:31 24 4
gpt4 key购买 nike

我有一些关于 C 中的 void 指针的问题。我发现了以下代码,ffmpeg 的一部分我无法理解...有人可以向我解释它是如何工作的吗?

void av_freep(void *arg)
{
void *val;

memcpy(&val, arg, sizeof(val));
memcpy(arg, &(void *){ NULL }, sizeof(val));
av_free(val);
}

后来这样称呼:

char *str;
av_freep(&str);

我的问题:

  1. str (&str) 的传递地址如何在编译时不触发“类型不兼容”警告? &str 类型不应该变成 char** 吗?
  2. memcpy 参数之一中的 &(void *){ NULL } 是什么意思?
  3. 为什么要释放未分配的“val”?

谢谢!

最佳答案

how passing address of str (&str) doesn't trigger "incompatible type" warning when it's compiled? Shouldn't &str type is become char**?

是的,char** 可以隐式转换为 void *(因为每个指针类型都可以隐式转换为 void *)。

what's the meaning of &(void *){ NULL } in one of memcpy parameter?

它是一个复合文字(尽管 void * 不是复合类型)。编译器分配一个常量 void * 来保存 NULL,然后 (&(void *){ NULL }) 是指向它的指针。它本质上等同于:

static void* const temp = NULL;
memcpy(arg, &temp, sizeof(val));

关于c - ffmpeg 中的 av_freep 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38891662/

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