gpt4 book ai didi

c - 静态分析“指向本地外部范围的指针”——误报?

转载 作者:行者123 更新时间:2023-11-30 18:30:10 28 4
gpt4 key购买 nike

Coverity 标记了一个我无法理解的问题。

我有一个初始化器:

1686  arrayOfNodeIds componentRefs = (arrayOfNodeIds) {
1687 .size = 2,
1688 .ids = (UA_NodeId[]) { UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY)}
1689 };

成员 ids 保存一个数组。然后这个结构体被赋予一个函数:

1707  UA_Server_addInstanceOf_instatiateChildNode(server, &subtypeRefs, &componentRefs, &typedefRefs,
1708 objectRoot, callback, (UA_ObjectTypeNode *) typeDefNode,
1709 UA_TRUE, &instantiatedTypes, handle);

该函数取消引用 conponentRefs->ids ,Coverity 将此标记为对范围之外的局部变量的访问。

通过谷歌搜索,我发现了类似的 issue in one linux driver这是通过使用 memcpy 到堆栈变量来解决的。但是,我根本不明白这个问题。内部数组的初始化器是否被视为范围限制器?有问题的文件可以在 github 上找到.

PS:arrayOfNodeIds 的定义:

typedef struct arrayOfNodeIds_s {
UA_Int32 size;
UA_NodeId *ids;
} arrayOfNodeIds;

最佳答案

isd 是一个指针,它指向一个复合文字。所有复合文字都被视为局部变量,并且它们具有局部作用域。

因此,如果您的结构具有静态存储持续时间(不太清楚“静态初始化程序”的含义),那么该工具的提示是正确的。因为在这种情况下,一旦程序离开初始化 isd 的范围,它就会指向垃圾。您必须指向另一个静态存储持续时间变量,或者使用动态分配。

关于c - 静态分析“指向本地外部范围的指针”——误报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32732525/

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