Jay*_*Jay 7 c singleton pointers
我有一些代码是这样的(这不是生产代码.只是一个示例代码)
char *inbuf = NULL;
inbuf = buf; //buf is some other valid buffer of size 100.
func(&inbuf);
.....
void func(char **p)
{
...
(*p)++;
...
}
Run Code Online (Sandbox Code Playgroud)
Coverity Tool表示"使用&inbuf获取地址会产生单身人士".我听说过关于C++的单例一词.但是,单例指针在C方面意味着什么呢?
单个指针在C方面意味着什么?
在这种情况下,我认为Coverity指的是char*数组与char*通过获取该数组地址创建的单个指针之间的区别.
Coverity公司警告您通过传递的第一个元素的地址buf来func,你使之更难以为自己安全写入到阵列,因为你不能轻易确定其大小.
在没有看到所有代码的情况下很难确定,但假设buf您已经在顶层函数中声明了一个数组,那么使用该函数中的sizeof运算符buf将产生数组的大小.
但是,当您将该地址传递buf给func该行时
func(&inbuf);
Run Code Online (Sandbox Code Playgroud)
... func仅接收指向该数组的第一个元素的指针.从func你不能再sizeof用来确定数组的大小 - 它只会返回指针的大小 - 所以如果没有对数组包含多少空间的隐含理解,你就无法安全地写入指针.
这使得代码易碎,因此实践很差.
(这些都与Singleton模式无关)