gpt4 book ai didi

c - 什么是 C 中的单例指针?

转载 作者:太空狗 更新时间:2023-10-29 17:10:10 25 4
gpt4 key购买 nike

我有一些这样的代码(这不是生产代码。只是示例代码)

char *inbuf = NULL;
inbuf = buf; //buf is some other valid buffer of size 100.

func(&inbuf);


.....

void func(char **p)
{
...
(*p)++;
...

}

Coverity 工具说“使用 &inbuf 获取地址会产生一个单例”。我听说过关于 C++ 的单例这个词。但是,单例指针在 C 语言中意味着什么?

最佳答案

What does a singleton pointer mean in terms of C?

在这种情况下,我认为 Coverity 指的是 char* 数组和指向通过获取该数组的地址创建的单个 char* 的指针之间的区别。

Coverity 警告您,通过将 buf 的第一个元素的地址传递给 func,您将让自己更难安全地写入该数组因为您无法轻易确定它的大小。

如果不查看所有代码就很难确定,但假设 buf 是一个数组,您已在顶级函数的某处声明然后使用 sizeof来自该函数的 buf 运算符将产生数组的大小。

但是,当你在行中将 buf 的地址传递给 func

func(&inbuf); 

...func 仅接收指向该数组第一个元素的指针。在 func 中,您不能再使用 sizeof 来确定数组的大小 - it will just return the size of the pointer - 因此,如果不隐含地了解数组包含多少空间,就无法安全地写入该指针。

这会导致代码脆弱,因此是一种糟糕的做法。

(这些都与 Singleton Pattern 无关)

关于c - 什么是 C 中的单例指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10934844/

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