指针数组作为c函数中的参数

金德曼

我陷入了C数组指针,并将其作为参数传递给C函数。这是涉及问题的代码:

char *src_filename1 = NULL;
AVFrame *frame = NULL;
AVFrame *frames_video1[3];
AVFrame *frames_video2[3];

int decode_packet(int *got_frame, int cached, AVFrame *frames_video[])
{
    ...
    frames_video[video_frame_count] = frame; //video_frame_count is 2 at the moment
    ...
}

int main()
{
    decode_video(src_filename1, frames_video1);
    ...
    printf("frames_video1[i]->pkt_size: %d\n", frames_video1[i]->pkt_size);
    ...
}
int decode_video(char *src_filename, AVFrame *frames_video[])
{
    ...
    decode_packet(&got_frame, 0, frames_video);
    ...
}

我可以编译代码,但是在执行代码时,遇到了由以下原因引起的分段错误:frames_video1[i]->pkt_size如何在此上下文中传递参数?我发现在处理char * []和char **时,尤其是当将它们用作函数参数时,我的手总是很脏。

编辑新代码:(有效!)

char *src_filename1 = NULL;
AVFrame *frame = NULL;
AVFrame frames_video1[3];
AVFrame frames_video2[3];

int decode_packet(int *got_frame, int cached, AVFrame frames_video[])
{
    ...
    AVFrame tmp;
    tmp = *frame;
    frames_video[video_frame_count] = tmp;
    ...
}

int main()
{
    decode_video(src_filename1, frames_video1);
    ...
    printf("frames_video1[i].pkt_size: %d\n", frames_video1[i].pkt_size);
    ...
}
int decode_video(char *src_filename, AVFrame frames_video[])
{
    ...
    decode_packet(&got_frame, 0, frames_video);
    ...
}

让我简要地总结一下旧代码的主要问题:与初始化没有什么关系,主要问题是将指针数组作为参数传递,实际上是正确地完全传递参数:在听完@SF的建议之后。 ,我将参数从AVFrame * frames_video []更改为AVFrameframes_video [],令人惊讶的是一切正常!这也意味着功能AVFrame frames_video1[]终于被成功“接收”了decode_packet……“数组在很多方面都表现为指针,以至于您陷入指针对指针的沼泽中。”他就是这么说的。实际上,我仍然不太真正理解c指针(尤其是与数组关联的指针)是如何工作的……

约翰·布林格

在这种情况下,我该如何传递论点?

就目前而言,您提供的代码很好。函数调用的参数与函数的参数一致(当然,在某些情况下,您可能会诱使编译器警告您)。此外,如果将数组作为函数参数传递,则被调用函数将看到与调用方相同的元素值,并且如果为该数组的任何元素设置了不同的值,则该效果对调用方可见。

我不确定为什么您有信心细分错误是由评估表达式引起的frames_video1[i]->pkt_size,但也许您是通过调试器确定的。在这种情况下,只有两种可能的解释:

  1. 变量i小于0或大于2,因此您尝试访问越界数组元素。检查循环边界,并要特别注意,一个最大的指数ñ -元素数组是N-1 ñ

  2. frames_video1[i]不是有效的指针。它可能永远不会设置为有效的指针,或者它可能是指向动态内存的指针,此指针已被释放,或者其值可能已损坏。当然,在其他答案及其评论中讨论的初始化问题指出了可以采用这种替代方法的一种途径,但是由于您似乎不赞成将其作为可能的原因,因此我不再赘述。

总体而言,您只展示了框架代码,而不是一个可以实际演示问题的可行示例。您将收到的答案必然受到此限制。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

数组和指针在c中作为函数参数的区别

来自分类Dev

指针作为C中的函数参数

来自分类Dev

C ++函数指针作为Doxygen中的参数

来自分类Dev

将指向char数组的指针作为函数的参数传递-C

来自分类Dev

以struct数组指针作为参数的函数,C语言

来自分类Dev

将指针传递给char数组作为函数的参数-C

来自分类Dev

C const 指向 const struct 数组的指针作为函数参数

来自分类Dev

将数组中的元素作为C函数中的指针传递

来自分类Dev

C将指针作为函数中的参数传递

来自分类Dev

成员函数指针的decltype作为c ++ 11中的模板参数

来自分类Dev

成员函数指针的decltype作为c ++ 11中的模板参数

来自分类Dev

作为参数传递时,在函数中更新指针地址。[将指针作为C中的引用传递]

来自分类Dev

从函数内部将数组作为函数参数传递,该数组将其作为C中的参数

来自分类Dev

在C中为函数指针参数分配数组

来自分类Dev

为什么将数组视为函数参数C ++中的指针?

来自分类Dev

如何调用以指针数组为参数的函数?在C中

来自分类Dev

函数指针作为Java 8中的参数

来自分类Dev

指向函数的C ++指针作为参数

来自分类Dev

函数指针作为参数的C ++问题

来自分类Dev

指向函数的C ++指针作为参数

来自分类Dev

C ADT函数指针作为参数?

来自分类Dev

c ++类方法指针作为函数参数

来自分类Dev

C语言-基于作为参数传递的索引值调用函数-函数指针数组

来自分类Dev

如何处理C中可变参数函数中作为参数传递的空指针

来自分类Dev

如何处理C中可变参数函数中作为参数传递的空指针

来自分类Dev

如何使用空指针数组作为参数将OCaml绑定到C函数

来自分类Dev

如何使用空指针数组作为参数将OCaml绑定到C函数

来自分类Dev

C++:访问作为函数参数传递的双指针数组指向的变量的值

来自分类Dev

如何接受带有任意数量参数的函数的指针(作为C中的参数)并调用它?

Related 相关文章

  1. 1

    数组和指针在c中作为函数参数的区别

  2. 2

    指针作为C中的函数参数

  3. 3

    C ++函数指针作为Doxygen中的参数

  4. 4

    将指向char数组的指针作为函数的参数传递-C

  5. 5

    以struct数组指针作为参数的函数,C语言

  6. 6

    将指针传递给char数组作为函数的参数-C

  7. 7

    C const 指向 const struct 数组的指针作为函数参数

  8. 8

    将数组中的元素作为C函数中的指针传递

  9. 9

    C将指针作为函数中的参数传递

  10. 10

    成员函数指针的decltype作为c ++ 11中的模板参数

  11. 11

    成员函数指针的decltype作为c ++ 11中的模板参数

  12. 12

    作为参数传递时,在函数中更新指针地址。[将指针作为C中的引用传递]

  13. 13

    从函数内部将数组作为函数参数传递,该数组将其作为C中的参数

  14. 14

    在C中为函数指针参数分配数组

  15. 15

    为什么将数组视为函数参数C ++中的指针?

  16. 16

    如何调用以指针数组为参数的函数?在C中

  17. 17

    函数指针作为Java 8中的参数

  18. 18

    指向函数的C ++指针作为参数

  19. 19

    函数指针作为参数的C ++问题

  20. 20

    指向函数的C ++指针作为参数

  21. 21

    C ADT函数指针作为参数?

  22. 22

    c ++类方法指针作为函数参数

  23. 23

    C语言-基于作为参数传递的索引值调用函数-函数指针数组

  24. 24

    如何处理C中可变参数函数中作为参数传递的空指针

  25. 25

    如何处理C中可变参数函数中作为参数传递的空指针

  26. 26

    如何使用空指针数组作为参数将OCaml绑定到C函数

  27. 27

    如何使用空指针数组作为参数将OCaml绑定到C函数

  28. 28

    C++:访问作为函数参数传递的双指针数组指向的变量的值

  29. 29

    如何接受带有任意数量参数的函数的指针(作为C中的参数)并调用它?

热门标签

归档